php curl - доступ по URL через ответ браузера: 200 доступ по URL через ответ curl: 401? - PullRequest
0 голосов
/ 26 ноября 2010

У меня есть URL, который содержит всю информацию в URL (имя пользователя / пароль / содержание и т. Д.)

Если я захожу на URL в моем браузере, я получаю успешный ответ.

Однако еслиЯ захожу на URL через curl, я получаю 401.

На URL нет аутентификации.

Что может быть причиной этого?

Код:

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

Обновление ... Странно ...

Итак,

Я строю свой URL через $ mconnect [$ index] ['url'].'?',http_build_query ($ url);

, который дает мне вышеуказанный 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 голосов
/ 01 декабря 2010

Хотя и не уверен, почему Исправление заключалось в том, чтобы самостоятельно создать URL-адрес вместо использования build_query_string в php 5

0 голосов
/ 26 ноября 2010

Попробуйте установить заголовок авторизации вручную. С чем-то вроде

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

0 голосов
/ 26 ноября 2010

Параметры, которые вы отправляете, могут быть отправлены через POST.

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

И в этом случае вам может не понадобиться опция CURLOPT_USERPWD.

0 голосов
/ 26 ноября 2010

"В URL нет аутентификации."однако я вижу,

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........
0 голосов
/ 26 ноября 2010

Сервер, вероятно, проверяет агента пользователя.Вам, вероятно, нужно установить его на то, что использует ваш браузер.

...