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_ENDauth_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



