如果我使用Postman执行带有以下参数的Webservice调用:
Content-Type: application/json
Cookie: xxxx
Body: json
Webservice成功返回JSON。
所以,我用Postman生成代码并将其粘贴到PHP上:
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "url",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "json",
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache",
"content-type: application/json",
"cookie: xxxx",
"postman-token: 7c771f8e-5c87-1d27-64f3-bdb92bba6a19"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Webservice返回错误401.但是当我在Postman上执行它时,它正在工作。 我与Postman的不同之处是什么?
答案 0 :(得分:1)
401错误代码通常是因为某些授权问题: -
请求需要用户身份验证。响应必须包括一个 包含挑战的WWW-Authenticate头字段(第14.47节) 适用于所请求的资源。客户可以重复 请求具有合适的授权标头字段(第14.8节)。如果 请求已包含授权凭据,然后是401 回复表明授权已被拒绝 证书。如果401响应包含与之相同的挑战 先前的响应,用户代理已经尝试过 验证至少一次,然后用户应该出现 响应中给出的实体,因为该实体可能包含 相关诊断信息。 HTTP访问身份验证是 在&#34; HTTP身份验证:基本和摘要访问中进行了解释 认证&#34;
这意味着您在验证请求时遇到问题
通常会通过模拟网络请求
来解决例如: -
假设您有一些页面需要登录才能访问它,
然后你将有两个你应该做的请求
1-发布一些登录验证数据 2-将第一个请求返回的cookie发送到第二个请求标题
您需要在php手册页
中的cURL中阅读有关cookie的更多信息特别CURLOPT_COOKIEJAR , CURLOPT_COOKIEJAR and CURLOPT_COOKIE
选项
答案 1 :(得分:0)
我有一个类似的问题。在邮递员中,它正在工作,但是通过卷曲它给出了 401 错误。
现在,它对我有用,下面的代码。我已经使用 base64_encode 作为用户名和密码。
手册参考:https://www.php.net/manual/en/function.curl-setopt.php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_TIMEOUT, 30); //timeout after 30 seconds
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Basic ".base64_encode($username.":".$password), ]);
$result=curl_exec ($ch);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); //get status code
echo "<br/>http status code is ".$status_code;
输出:
http status code is 200
答案 2 :(得分:0)
从您的 .htaccess 中删除以下行:
SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0
它对我有用!