Есть ли другой способ сделать этот HTTP-запрос в php? - PullRequest
0 голосов
/ 13 октября 2010
function do_post_request($url, $data, $optional_headers = null) {

    $request = new HttpRequest($url, HttpRequest::METH_POST);
    $request->setBody($data);
        $response = $request->send();
        return $response->getBody();

}

Этот фрагмент кода, похоже, не работает и, похоже, вылетает из моего сценария. Я не знаю, так ли это, потому что у меня нет модуля php_http, но есть ли эквивалент, который я могу использовать?

Например, локон? Я пробовал curl, но я мало что знаю об этом, и с помощью curl я получил «неверный запрос» с сервера, к которому я пытался подключиться со статусом 400.

Все будет хорошо

Спасибо

Tom

Edit:

function do_post_request($url, $data, $optional_headers = null) {


    $request = new HttpRequest($url, HttpRequest::METH_POST);
     $request->setBody($data);
  $response = $request->send();
  return $response->getBody();

}


echo "before";

$response = do_post_request($url, $data);
echo "After";

Выполнение этого заставляет «до» появляться на странице. Но нет «После».

После включения включения отчетов об ошибках я получаю:

Fatal error: Class 'HttpRequest' not found in /home/sites/ollysmithwineapp.com/public_html/mellowpages/geocode.php on line 25

Так что мне нужен другой способ выполнить HTTP-запрос.

Ответы [ 4 ]

1 голос
/ 31 октября 2011

Я также нашел решение с помощью stream_context_create ().Это дает вам больше контроля над тем, что вы отправляете в POST.

Вот сообщение в блоге, объясняющее, как это сделать.Позволяет легко указать точные заголовки и тело.

http://wezfurlong.org/blog/2006/nov/http-post-from-php-without-curl/

1 голос
/ 14 октября 2010

Конечно, расширение HTTP установлено и настроено правильно?

Установка / настройка

Установка

Это »расширение PECL не входит в комплектс PHP.

Информацию по установке этого расширения PECL можно найти в главе руководства, озаглавленной Установка расширений PECL.Дополнительная информация, такая как новые выпуски, загрузки, исходные файлы, информация о разработчике и CHANGELOG, может быть найдена здесь: »http://pecl.php.net/package/pecl_http.

и, возможно, cURl - это путь

1 голос
/ 14 октября 2010

украдено у на этот вопрос .Вы можете вставить $data напрямую, где вместо строки запроса установлено CURLOPT_POSTFIELDS.

<?php
//
// A very simple PHP example that sends a HTTP POST to a remote site
//

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,"http://www.mysite.com/tester.phtml");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,
            "postvar1=value1&postvar2=value2&postvar3=value3");

// receive server response ...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$server_output = curl_exec ($ch);

curl_close ($ch);

// further processing ....
if ($server_output == "OK") { ... } else { ... }

?>
0 голосов
/ 13 октября 2010

Нет HttpRequest::setBody() метода. Вместо этого вы должны использовать функцию addPostFields, используя ассоциативный массив:

function do_post_request($url, $data, $optional_headers = null) {
    $request = new HttpRequest($url, HttpRequest::METH_POST);
    $request->setPostFields($data);
    $response = $request->send();
    return $response->getBody();
}

$responseBody = do_post_request('http://www.example.com',array('examplefield'=>'exampledata'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...