Использование fsockopen для POST к URL запроса GET - PullRequest
1 голос
/ 07 января 2012

Что не так с этим необработанным HTTP-вызовом с использованием fsockopen?

POST /api/?action=report HTTP/1.1
Host: www.webhosting-performance.com
Content-Type: application/x-www-form-urlencoded
Conent-Length: 9
Connection: close

test=test

Удаленный скрипт говорит, что var_dump ($ _ POST) пуст.

Фрагмент моего php-кода выглядит следующим образом:

if (ini_get('allow_url_fopen') > 0) {

  $parts = parse_url($url);
  $fp = fsockopen($parts['host'], isset($parts['port']) ? $parts['port'] : 80, $errno, $errstr, 30);

  if (!$fp) throw new Exception("Problem with $url, $errstr");

  $post_string = $post_fields ? http_build_query($post_fields) : '';

  $out = ($post_string ? "POST " : "GET ") . $parts['path'] . ((isset($parts['query'])) ? "?" . $parts['query'] : false) ." HTTP/1.1\r\n"
       . "Host: ". $parts['host'] ."\r\n"
       . ($post_string ? "Content-Type: application/x-www-form-urlencoded\r\n" : false)
       . "Conent-Length: ". strlen($post_string) ."\r\n"
       . "Connection: close\r\n"
       . "\r\n" . $post_string;

  fwrite($fp, $out);

  // ...

} else {
  // use curl
}

Ответы [ 2 ]

2 голосов
/ 07 января 2012

У вас просто есть опечатка:

Conent-Length: 9

См. Пропущенное t в Content-Length:

Реальный вопрос в том, чтобы не испортить ваши усилия по созданию чего-либо самостоятельно.почему вы не используете cURL или PEARs HTTP-запрос класс?

0 голосов
/ 07 января 2012

Почему бы вам не использовать PEAR::Http_Request2?

...