php curl - 通过浏览器响应访问url:通过curl响应访问url:401?

时间:2010-11-25 21:30:46

标签: php curl httpresponse

我有一个网址,其中包含网址(用户名/密码/内容等)

中的所有信息

如果我在浏览器中访问该网址,我会得到一个成功的回复。

但是,如果我通过卷曲访问网址,我会得到401。

网址上没有身份验证。

导致这种情况的原因是什么?

代码:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://mconnect.co.nz/v1/sendmessage?appname=app&pass=pass&msgclass=test&msgid=6&body=Some+Content&to=02712345678');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, $mconnect[$index]['app_name'] . ":" . $mconnect[$index]['app_pass']);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.12 (KHTML, like Gecko) Chrome/9.0.587.0 Safari/534.12');
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_POST, false);
if(curl_exec($ch) === false) 
  echo 'fail: '.curl_error($ch);

<小时/> 的更新...奇怪...

所以,

我正在构建我的网址 $ mconnect [$ index] ['url']。 '?' 。 http_build_query($ URL);

给了我上面的网址。

所以,

如果我有

$url = $mconnect[$index]['url'] . '?' . http_build_query($url);
curl_setopt($ch, CURLOPT_URL, $url);

我得到了401。

但是,

如果我那么做 echo $mconnect[$index]['url'] . '?' . http_build_query($url);

我得到了

  

http://mconnect.co.nz/v1/sendmessage?appname=app&pass=pass&msgclass=test&msgid=6&body=Some+Content&to=02712345678

所以,如果我那么做

$url = 'http://mconnect.co.nz/v1/sendmessage?appname=app&pass=pass&msgclass=test&msgid=6&body=Some+Content&to=02712345678';
    curl_setopt($ch, CURLOPT_URL, $url);

然后它有用......

任何想法?

5 个答案:

答案 0 :(得分:0)

服务器可能正在验证用户代理。您可能需要将其设置为浏览器使用的任何内容。

答案 1 :(得分:0)

您发送的参数可能需要通过POST发送。

$posts = array('pass' => 'password', 'body' => 'lots of content'); // ... etc;
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $posts);

如果是这种情况,您可能不需要使用CURLOPT_USERPWD选项。

答案 2 :(得分:0)

“网址上没有身份验证。”但是我看到了

curl_setopt($ch, CURLOPT_USERPWD, $mconnect[$index]['app_name'] . ":" . $mconnect[$index]['app_pass']);

不是认证吗?

注意: 您也可以尝试发送HTTP登录详细信息,如

curl_setopt($ch, CURLOPT_URL, 'http://'.$mconnect[$index]['app_name'] . ":" . $mconnect[$index].'@mconnect.co.nz/v........

答案 3 :(得分:0)

尝试手动设置授权标头。有点像

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Basic ' . base64_encode($mconnect[$index]['app_name'] . ":" . $mconnect[$index]['app_pass'])));

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.8

答案 4 :(得分:0)

虽然不确定为什么修复是自己构建URL而不是使用php 5的build_query_string