网页网站您现在的位置是:首页 > 博客日志 > 网页网站

http Basic认证服务器配置与编程访问时添加请求头

<a href='mailto:'>微wx笑</a>的头像微wx笑 2022-10-02网页网站 2 0关键字: Basic认证  Authorization  

有的网站访问时会弹出对话框要求输入用户名和密码,不输入就返回401 Authorization Required,这是怎么实现的?编程访问时应该怎么添加请求头呢?

有的网站访问时会弹出对话框要求输入用户名和密码,不输入就返回401 Authorization Required,这是怎么实现的?编程访问时应该怎么添加请求头呢?v1W无知

比如我这个域名:http://d2u2.com/ v1W无知

image.pngv1W无知

服务器配置方法

以Nginx为例v1W无知

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"; 指定认证类型v1W无知

auth_basic_user_file /www/server/pass/d2u2.com.pass; 指定存放用户密码的文件v1W无知

.pass文件格式为v1W无知

用户名:密码
用户名:密码

用户名和密码以冒号分隔,每行保存一个。v1W无知

注意:.pass文件中的密码是经过加密的,默认应该是 MD5加密;可以使用工具“htpasswd”来生成.pass文件v1W无知

编程访问时添加请求头

http Basic认证是 http协议定义的一种认证方式,将客户端id和客户端密码按照“客户端ID:客户端密码”的格式拼接,并用base64编 码,放在header中请求服务端,v1W无知

一个例子: Authorization:Basic WGNXZWJBcHA6WGNXZWJBcHA= v1W无知

WGNXZWJBcHA6WGNXZWJBcHA= 是用户名:密码的base64编码。 v1W无知


v1W无知

编程访问时需要添加header,我们知道header是键值对形式v1W无知

name="Authorization"v1W无知

value="用户名:密码的base64编码"v1W无知

http basic认证的Java代码实现

相关Java代码如下:v1W无知

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);


v1W无知

本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/blog/web/2022-10-02/1403.html

很赞哦! () 有话说 ()