#php #laravel #curl #guzzle #laravel-7
Вопрос:
в laravel 7 на одной из моих работ я отправляю http-запрос, и на 95 процентов из них я получаю html-ответ.
Запрос
$url = "some url";
/**
* Request with Guzzle and xml
*/
$response = Http::retry(3, 1000)->timeout(60)->withHeaders([
'User-Agent' => 'curl/7.65.3',
'Accept' => 'text/html,application/xhtml xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding' => 'gzip, deflate, br',
])->withOptions([
'referer' => true,
'verify' => false
])->get($url);
if($response->successful()){
try {
self::$response = $response->body();
return true;
} catch (Throwable $th) {
Log::error(
'status:' . $response->status() .'n' .
'server Error:' . $response->serverError() .'n' .
'client Error:' . $response->clientError() .'n' .
'body:' . $response->body()
);
return false;
}
return true;
}else{
try {
Log::error($url);
Log::error(
'status:' . $response->status() .'n' .
'server Error:' . $response->serverError() .'n' .
'client Error:' . $response->clientError() .'n' .
'body:' . $response->body()
);
} catch (Throwable $th) {
Log::error("couldn't even log the error of guzzle request");
Log::error($th);
}
return false;
}
Ответ
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style type="text/css">
html, body, #partner, iframe {
height: 100%;
width: 100%;
margin: 0;
padding: 0;
border: 0;
outline: 0;
font-size: 100%;
vertical-align: baseline;
background: transparent;
}
body {
overflow: hidden;
}
</style>
<meta content="NOW" name="expires">
<meta content="index, follow, all" name="GOOGLEBOT">
<meta content="index, follow, all" name="robots">
<!-- Following Meta-Tag fixes scaling-issues on mobile devices -->
<meta content="width=device-width; initial-scale=1.0; maximum-scale=1.0;
user-scalable=0;" name="viewport">
</head>
<body>
<div id="partner"></div>
<script type="text/javascript">
function getParam() {
var query = window.location.search.substring(1);
var vars = query.split("amp;");
for (var i = 0; i < vars.length; i ) {
var pair = vars[i].split("=");
if (pair[0] == 'domain') {
return pair[1];
}
}
return window.location.host;
}
;
document.write(
'<script type="text/javascript" language="JavaScript"'
'src="//sedoparking.com/frmpark/'
getParam() '/'
'sedopark'
'/park.js">'
'</script>'
);
</script>
</body>
</html>
То, что я делал
- попросил поставщика проверить, есть ли у их сервера какая-либо защита от наших запросов. они этого не делают, и все другие типы запросов, которые мы отправляем (покупка, контакты и т.д.), У них нет проблем.
- обновил наш php до 7.3 на всех наших доменах и поддоменах
- сначала это был завиток, я изменил его на HTTP, все еще есть та же проблема.
- Я добавил «Агент пользователя» = > «curl/7.65.3» И «проверка» = > > ложь на основе различных поисков в interent. но ни один из них не устранил проблему.
- в жратве > src >> обработчик >>> crulfactory.php изменил значение проверки на всегда равное нулю
if ($options['verify'] === false) {
unset($conf[CURLOPT_CAINFO]);
$conf[CURLOPT_SSL_VERIFYHOST] = 0;
$conf[CURLOPT_SSL_VERIFYPEER] = false;
} else {
// $conf[CURLOPT_SSL_VERIFYHOST] = 2;
// $conf[CURLOPT_SSL_VERIFYPEER] = true;
$conf[CURLOPT_SSL_VERIFYHOST] = 0;
$conf[CURLOPT_SSL_VERIFYPEER] = false;
Дополнительная информация
Это задание отправляется регулярно (20 заданий одновременно) каждые 30 минут
согласно журналам, это показывает, что http-запрос успешно вернул ответ. но когда я регистрирую ответ, я получаю html-код. Я должен получить XML того, что мне присылает поставщик.
Комментарии:
1. Что вы получаете, когда это терпит неудачу? Отображаются ли в файлах журнала какие-либо сведения?
2. @NigelRen согласно журналам, это показывает, что http-запрос успешно вернул ответ. но когда я регистрирую ответ, я получаю html-код. Я должен получить XML того, что мне присылает поставщик.