Curl PHP не может отображать Amazon

Я использую следующий код и не могу отобразить amazon.com используя php и curl. Я использую curl_error и не получаю ошибок, поэтому я не уверен, что я делаю неправильно

<?php

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, 'https://www.amazon.com');

curl_exec($curl);

curl_close ($curl);

Я делаю это на местном хосте

1

Решение

просто покажите амазонку и используйте

echo file_get_contents("https://www.amazon.com");
1

Другие решения

Вы должны использовать следующее:

$response = curl_exec($curl);

$ result является массивом. Например, вы можете получить тело запроса, используя:

$header_size = curl_getinfo($curl,CURLINFO_HEADER_SIZE);
$result['header'] = substr($response, 0, $header_size);
$result['body'] = substr( $response, $header_size );
$result['http_code'] = curl_getinfo($curl,CURLINFO_HTTP_CODE);
$result['last_url'] = curl_getinfo($curl,CURLINFO_EFFECTIVE_URL);

echo $result['body'];

Для дополнительной информации: http://php.net/manual/de/function.curl-exec.php

1

при отладке кода curl используйте CURLOPT_VERBOSE и опубликуйте журнал CURLOPT_VERBOSE при обращении за помощью. также при отладке не игнорируйте возвращаемые значения curl_setopt, потому что он возвращает bool (false), если произошла ошибка, и если была ошибка, эта ошибка, вероятно, объясняет, почему код не работает. также не игнорируйте возвращаемое значение curl_exec, потому что оно возвращает bool (false), если произошла ошибка, которая остается незамеченной, если вы игнорируете возвращаемое значение (и ваш код делает)

Вот версия вашего кода, которая не игнорирует никаких ошибок и включает ведение журнала CURLOPT_VERBOSE, она должна показать, где ваш код не работает:

<?php
$curl = curl_init();
if (! is_resource($curl)) {
throw new \RuntimeException('curl_init() failed!');
}
ecurl_setopt($curl, CURLOPT_URL, 'https://www.amazon.com');
ecurl_setopt($curl, CURLOPT_VERBOSE, 1);
$curlstderr = etmpfile();
$curlstdout = etmpfile();
ecurl_setopt($curl, CURLOPT_STDERR, $curlstderr);
ecurl_setopt($curl, CURLOPT_FILE, $curlstdout);
if (true !== curl_exec($curl)) {
throw new \RuntimeException("curl_exec failed! " . curl_errno($curl) . ": " . curl_error($curl));
}
rewind($curlstderr); // https://bugs.php.net/bug.php?id=76268
rewind($curlstdout); // https://bugs.php.net/bug.php?id=76268
$verbose = stream_get_contents($curlstderr);
$output = stream_get_contents($curlstdout);
curl_close($curl);
fclose($curlstderr);
fclose($curlstdout);
var_dump($verbose, $output);

function ecurl_setopt ( /*resource*/$ch, int $option , /*mixed*/ $value): bool
{
$ret = curl_setopt($ch, $option, $value);
if ($ret !== true) {
// option should be obvious by stack trace
throw new RuntimeException('curl_setopt() failed. curl_errno: ' . return_var_dump(curl_errno($ch)) . '. curl_error: ' . curl_error($ch));
}
return true;
}

function etmpfile()
{
$ret = tmpfile();
if (false === $ret) {
throw new \RuntimeException('tmpfile() failed!');
}
return $ret;
}

Кроме того, кажется, что https://www.amazon.com есть ошибка, смотрите Это ошибка отправки ответа gzip-сжатым клиентам, которые не указывают Accept-Encoding: gzip?

  • в любом случае, чтобы заставить curl автоматически распаковать сжатый gzip ответ от amazon, добавьте ecurl_setopt($curl,CURLOPT_ENCODING,''); , который говорит libcurl добавить Accept-Encoding: gzip,deflate заголовок и автоматически распаковывает результат.
1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector