спец. символ в параметре get , а так же русские буквы в параметре. file_get_contents

собственно надо получить при помощи file_get_contents ответ от

https://geocult.ru/lunnyiy-kalendar-2

а проблем тут 2.

  1. в строке запроса в значении параметра tz2 есть символ /. Дурь, конечно, но на запрашиваемый сервер я повлиять не могу.
  2. русские буквы в значении параметра cit которые я пробовал закодировать в % последовательность так же не срабатывают.

То есть грубо говоря я при помощи file_get_contents делаю следующее :

$url = "https://geocult.ru/lunnyiy-kalendar-2?d1=10&m1=6&y1=1981&h1=20&mi=4&tz1=1&tz2=Europe%2FBerlin&lg=11.5754&lt=48.1374&cit=%D0%9C%D1%8E%D0%BD%D1%85%D0%B5%D0%BD&cn=DE&st=02&ci=2867714&sb=1"

$result = file_get_contents($url);
echo($result);

но параметры tz2=Europe%2FBerlin и cit=%D0%9C%D1%8E%D0%BD%D1%85%D0%B5%D0%BD не понимаются в https://geocult.ru/lunnyiy-kalendar-2

тогда как если вбить в браузер всё отображается как мне надо : https://geocult.ru/lunnyiy-kalendar-2?d1=10&m1=6&y1=1981&h1=20&mi=4&tz1=1&tz2=Europe%2FBerlin&lg=11.5754&lt=48.1374&cit=%D0%9C%D1%8E%D0%BD%D1%85%D0%B5%D0%BD&cn=DE&st=02&ci=2867714&sb=1


Ответы (1 шт):

Автор решения: teran

для кодирования данных в URL используют url_encode, и в целом параметры обычно оформляют в виде массива, а потом формируют строку с помощью http_build_query()

$params = [
        'd1' => 10,
        'm1' => 6,
        'y1' => 1981,
        'h1' => 20,
        'mi' => 4,
        'tz1' => 1,
        'tz2' => "Europe/Berlin",
        'lg' => 11.5754,
        'lt' => 48.1374,
        'cit' => "Мюнхен",
        'cn' => "DE",
        'st' => 02,
        'ci' => 2867714,
        'sb' => 1
    ];
    
$ctx = [
    "ssl" => [
        "verify_peer"=>false,
        "verify_peer_name"=>false,
    ]
];

$url = "https://geocult.ru/lunnyiy-kalendar-2?" . http_build_query($params);
$data = file_get_contents($url, null, stream_context_create($ctx));

последующие действия по парсингу предлагаю проводить, например, с помощью simple_html_dom

→ Ссылка