http Basic认证服务器配置与编程访问时添加请求头
微wx笑 2022-10-02【网页网站】 2 0关键字: Basic认证 Authorization
有的网站访问时会弹出对话框要求输入用户名和密码,不输入就返回401 Authorization Required,这是怎么实现的?编程访问时应该怎么添加请求头呢?
有的网站访问时会弹出对话框要求输入用户名和密码,不输入就返回401 Authorization Required,这是怎么实现的?编程访问时应该怎么添加请求头呢?
比如我这个域名:http://d2u2.com/
服务器配置方法
以Nginx为例
server { listen 80; server_name d2u2.com www.d2u2.com *.d2u2.com; index index.php index.html index.htm default.php default.htm default.html; root /www/wwwroot/d2u2.com; #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则 #error_page 404/404.html; #AUTH_START auth_basic "Authorization"; auth_basic_user_file /www/server/pass/d2u2.com.pass; #AUTH_END
auth_basic "Authorization"; 指定认证类型
auth_basic_user_file /www/server/pass/d2u2.com.pass; 指定存放用户密码的文件
.pass文件格式为
用户名:密码 用户名:密码
用户名和密码以冒号分隔,每行保存一个。
注意:.pass文件中的密码是经过加密的,默认应该是 MD5加密;可以使用工具“htpasswd”来生成.pass文件
编程访问时添加请求头
http Basic认证是 http协议定义的一种认证方式,将客户端id和客户端密码按照“客户端ID:客户端密码”的格式拼接,并用base64编 码,放在header中请求服务端,
一个例子: Authorization:Basic WGNXZWJBcHA6WGNXZWJBcHA=
WGNXZWJBcHA6WGNXZWJBcHA= 是用户名:密码的base64编码。
编程访问时需要添加header,我们知道header是键值对形式
name="Authorization"
value="用户名:密码的base64编码"
http basic认证的Java代码实现
相关Java代码如下:
LinkedMultiValueMap<String, String> headers = new LinkedMultiValueMap<>(); String httpBasic = getHttpBasic(clientId, clientSecret); headers.add("Authorization",httpBasic);
public String getHttpBasic(String clientId,String clientSecret){ String string=clientId+":"+clientSecret; //将串进行Base64编码 byte[] encode = Base64Utils.encode(string.getBytes()); return "Basic "+new String(encode); }
php代码实现
private function http_request_xml($url,$data = null,$arr_header = null){ $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); // curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); if (!empty($data)){ curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } if(!empty($arr_header)){ curl_setopt($curl, CURLOPT_HTTPHEADER, $arr_header); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($curl); // echo curl_getinfo($curl); curl_close($curl); unset($curl); return $output; } $url = "http://ww.baidu.com"; $arr_header[] = "Content-Type:application/json"; $arr_header[] = "Authorization: Basic ".base64_encode("username:password"); //添加头,在name和pass处填写对应账号密码 $data['para'] = "1111"; $res = $this->http_request_xml($url,json_encode($data), $arr_header);
本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/blog/web/2022-10-02/1403.html