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

Как сделать запрос с передачей header в php?

Есть код на питоне -
header={'X-Device-ID': '9cf60abdee55cb0d',
'X-Device-Model': 'SM-N975F',
'X-Platform': 'Android',
'X-OS-Version': '25',
'X-Language': 'ru_RU',
'X-App-Version': '7.6.0',
'X-Build-Number': '3689',
'X-Cellular-Name': 'MTS',
'X-City-ID': '5dfc9fdc51f0dc92455beefa',
'X-Timezone': 'GMT+08:00',
'X-Appsflyer-ID': '1608558652958-3588301580748629636',
'Authorization': 'Bearer fghdfghgfdhYadePcfi2c9MgQNjvJOMd1w',
'Host': 'mobile-api.mcdonalds.ru',
'Connection': 'close',
'Accept-Encoding': 'gzip, deflate',
'User-Agent': 'okhttp/3.12.1'}
url7 = 'https://mobile-api.mcdonalds.ru/api/v1/awards'
r7 = requests.get(url7, headers=header)
res5 = json.loads(r7.text)
print(res5)

нужно сделать такой же запрос но на php, Помогите с реализацией
попробовал через cURL
$headers = array('X-Device-ID'=> '9cf60abdee55cb0d',
			'X-Device-Model'=> 'SM-N975F',
			'X-Platform'=> 'Android',
			'X-OS-Version'=> '25',
			'X-Language'=> 'ru_RU',
			'X-App-Version'=>'7.6.0',
			'X-Build-Number'=> '3689',
			'X-Cellular-Name'=> 'MTS',
			'X-City-ID'=> '5dfc9fdc51f0dc92455beefa',
			'X-Timezone'=> 'GMT+08:00',
			'X-Appsflyer-ID'=> '1608558652958-3588301580748629636',
			'Authorization'=> 'Bearer fghdfghgfdhYadePcfi2c9MgQNjvJOMd1w',
			'Host'=> 'mobile-api.mcdonalds.ru',
			'Connection'=> 'close',
			'Accept-Encoding'=> 'gzip, deflate',
			'User-Agent' =>'okhttp/3.12.1');
$url = 'https://mobile-api.mcdonalds.ru/api/v1/awards';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPGET,true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($header));
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
$html = curl_exec($ch);

Но выдает ошибку - Method POST not allowed for URL /api/v1/awards, Помогите написать запрос, что бы результат был тот же , по идеи должен вернуться json массив из которого нужно взять id.
  • Вопрос задан
  • 565 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@rPman
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($header));
тут ошибка - это делает запрос POST с полями равными списку ваших заголовков (т.е. это будут уже данные а не заголовки)
надо
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@galliard
Можно и без курла.
$url = 'https://mobile-api.mcdonalds.ru/api/v1/awards';
$headers = [
    'X-Device-ID: 9cf60abdee55cb0d',
    'X-Device-Model: SM-N975F',
    'X-Platform: Android',
    'X-OS-Version: 25',
    'X-Language: ru_RU',
    'X-App-Version: 7.6.0',
    'X-Build-Number: 3689',
    'X-Cellular-Name: MTS',
    'X-City-ID: 5dfc9fdc51f0dc92455beefa',
    'X-Timezone: GMT+08:00',
    'X-Appsflyer-ID: 1608558652958-3588301580748629636',
    'Authorization: Bearer fghdfghgfdhYadePcfi2c9MgQNjvJOMd1w',
    'Host: mobile-api.mcdonalds.ru',
    'Connection: close',
    'Accept-Encoding: gzip, deflate',
    'User-Agent: okhttp/3.12.1',
];
$context = stream_context_create([
    'http' => [
          'method' => 'POST',
          'header' => join(PHP_EOL, $headers),
          'content' => QUERY,
    ],
]);
$responseBody = file_get_contents($url, false, $context);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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