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

I have a url which contains all information in the url (username/password/content ect)

If i visit the url in my browser I get a successful response.

However If I visit the url through curl I get 401.

There is no authentication on the url.

What could be causing this?

Code:

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


Update...Strange...

So,

I am building my url through $mconnect[$index]['url'] . '?' . http_build_query($url);

which gives me the above url.

So,

If I have

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

I get the 401.

But,

If I then do echo $mconnect[$index]['url'] . '?' . http_build_query($url);

I get

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

so if I then do

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

Then it works...

any ideas?

doushang1964
doushang1964 刚刚添加了代码
接近 10 年之前 回复
douwo8140
douwo8140 你确定你正在使用cURL进行HTTPpost/get吗?
接近 10 年之前 回复

5个回答



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

展开原文

原文

Although not sure why The fix was to build the URL myself instead of using php 5's build_query_string



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

展开原文

原文

The server is likely verifying the user-agent. You probably need to set it to whatever your browser uses.

dongzai5181
dongzai5181 这是谷歌Chrome用户代理。
接近 10 年之前 回复
duanmianzhou5353
duanmianzhou5353 那是一个非常好奇的用户代理。 尝试摆脱额外的浏览器,他们可能会做一些有趣的事情来防止这种情况......
接近 10 年之前 回复
duanpa1898
duanpa1898 只是添加了代码,是的,我认为也可能是这种情况,但不是。
接近 10 年之前 回复

The parameters you're sending might need to be sent via POST.

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

And if this is the case you might not need to use the CURLOPT_USERPWD option.

doutan1905
doutan1905 它必须依赖会话/ cookie。 清除您的cookie,然后尝试直接访问它。 我敢打赌它在那时不起作用。
接近 10 年之前 回复
douchuose2514
douchuose2514 nope不发布,否则直接从浏览器访问它时不起作用。
接近 10 年之前 回复



“网址上没有身份验证。” 但是我看到</ p>

  curl_setopt($ ch,CURLOPT_USERPWD,$ mconnect [$ index] ['app_name']。“:”。$。mconnect [$ index] ['app_pass'  ]); 
</ code> </ pre>

不是用于身份验证吗?</ p>

注意:
您也可以尝试发送HTTP登录详细信息 </ p>

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

</ div>

展开原文

原文

"There is no authentication on the url." however i see

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

isnt that for authentication?

Note: You may also try sending the HTTP login details like this

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

dongzh1988
dongzh1988 ..你确定发送的用户名和密码是否正确? 尝试我建议发送身份验证详细信息的替代方法。
接近 10 年之前 回复
duanhu7390
duanhu7390 好吧,我已经试过了,没有那个。
接近 10 年之前 回复



尝试手动设置授权标头。 类似于</ p>

curl_setopt($ ch,CURLOPT_HTTPHEADER,array('Authorization:Basic'.base64_encode($ mconnect [$ index] ['app_name']。“:”。 $ mconnect [$ index] ['app_pass']))); </ code> </ p>

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.8 </ p>
</ DIV>

展开原文

原文

Try setting the authorization header manually. With something like

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐