Задать вопрос
@psiklop

Не могу достучаться до калькулятора почты?

Ответа нет с домашнего сервера, нет заголовков, ничего. С других серверов хорошо работает.

$url = "https://tariff.pochta.ru/v2/calculate/tariff/delivery?json&weight=60&from=685000&to=101000&object=4030&closed=0";
echo file_get_contents($url, null, stream_context_create(['http'=>['method'=>"GET", 'timeout' => 4, 'ignore_errors' => true]]));


Я решил, что мой IP забанен, но почему-то из браузера хорошо работает (с очищенными куками).
Тогда я стал пробовать curl, скопировав туда все заголовки своего браузера, но ответ также пустой.

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 YaBrowser/23.11.0.0 Safari/537.36");
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Accept"=>"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"Accept-Encoding"=>"gzip, deflate, br",
"Accept-Language"=>"ru,en;q=0.9,uk;q=0.8",
"Cache-Control"=>"max-age=0",
"Connection"=>"keep-alive",
"Host"=>"tariff.pochta.ru",
"Sec-Ch-Ua"=>'"Chromium";v="118", "YaBrowser";v="23.11", "Not=A?Brand";v="99", "Yowser";v="2.5"',
"Sec-Ch-Ua-Mobile"=>"?0",
"Sec-Ch-Ua-Platform"=>'"Windows"',
"Sec-Fetch-Dest"=>"document",
"Sec-Fetch-Mode"=>"navigate",
"Sec-Fetch-Site"=>"none",
"Sec-Fetch-User"=>"?1",
"Upgrade-Insecure-Requests"=>"1"));
curl_setopt($ch, CURLOPT_HEADER, true);
var_dump(curl_exec($ch));
  • Вопрос задан
  • 188 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
link_web
@link_web
Magento, Laravel, Zend, Shopify, Prestashop, WP
Вот так все работает. Получаю результат
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://tariff.pochta.ru/v2/calculate/tariff/delivery?json=null&weight=60&from=685000&to=101000&object=4030&closed=0',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
Ответ написан
@psiklop Автор вопроса
Решение тут: https://stackoverflow.com/questions/75763525/curl-...

Сайт почты что-то там не поддерживает. А на домашнем сервере Ubuntu 22.04.
Лечится включением какого-то небезопасного флага:

Вы также могли бы просто добавить Options = UnsafeLegacyServerConnect к существующему /etc/ssl/openssl.cnf в разделе [system_default_sect].

ПРИМЕЧАНИЕ. В OpenSSL < 3.0.4 произошла ошибка, из-за которой эта UnsafeLegacyServerConnect опция игнорировалась. Если вы застряли с <= 3.0.3, вы могли бы использовать (более небезопасный) UnsafeLegacyRenegotiation вместо этого.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы