Пользовательские заголовки PHP cURL

#php #curl

#php #curl

Вопрос:

Мне интересно, можете ли вы добавить пользовательские заголовки к HTTP-запросу cURL в PHP. Я пытаюсь подражать тому, как iTunes захватывает обложки и использует эти нестандартные заголовки:

 X-Apple-Tz: 0
X-Apple-Store-Front: 143444,12
  

Как я мог бы добавить эти заголовки в запрос?

Ответ №1:

 curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'X-Apple-Tz: 0',
    'X-Apple-Store-Front: 143444,12'
]);
  

https://www.php.net/manual/en/function.curl-setopt.php

Ответ №2:

Используйте следующий синтаксис

 $ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.example.com/process.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$vars);  //Post Fields
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$headers = [
    'X-Apple-Tz: 0',
    'X-Apple-Store-Front: 143444,12',
    'Accept: text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Encoding: gzip, deflate',
    'Accept-Language: en-US,en;q=0.5',
    'Cache-Control: no-cache',
    'Content-Type: application/x-www-form-urlencoded; charset=utf-8',
    'Host: www.example.com',
    'Referer: http://www.example.com/index.php', //Your referrer address
    'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:28.0) Gecko/20100101 Firefox/28.0',
    'X-MicrosoftAjax: Delta=true'
];

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$server_output = curl_exec ($ch);

curl_close ($ch);

print  $server_output ;
  

Комментарии:

1. Вы тоже заслуживаете cookie

2. Подмена строки пользовательского агента звучит для меня как плохая идея. Вот что говорится в спецификации HTTP .

3. Что $vars в этом примере?

4. @GRX , $vars — это массив ваших данных post , примерно такой: $vars = array(‘item1’ => ‘value1′,’item2’ => ‘value2’);

5. CURLOPT_POSTFIELDS подразумевает CURLOPT_POST, поэтому вам не нужно устанавливать CURLOPT_POST

Ответ №3:

 $subscription_key = '';
$host = '';    
$request_headers = [
    'X-Mashape-Key:' . $subscription_key,
    'X-Mashape-Host:' . $host
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers);

$season_data = curl_exec($ch);

if (curl_errno($ch)) {
    print "Error: " . curl_error($ch);
    exit();
}

// Show me the result
curl_close($ch);
$json = json_decode($season_data, true);
  

Ответ №4:

Вот одна из основных функций:

 /**
 * 
 * @param string $url
 * @param string|array $post_fields
 * @param array $headers
 * @return type
 */
function cUrlGetData($url, $post_fields = null, $headers = null) {

    $ch = curl_init();
    $timeout = 5;
    curl_setopt($ch, CURLOPT_URL, $url);

    if (!empty($post_fields)) {

        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
    }

    if (!empty($headers))
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $data = curl_exec($ch);

    if (curl_errno($ch)) {

        echo 'Error:' . curl_error($ch);
    }

    curl_close($ch);
    return $data;
}
  

Пример использования:

 $url = "http://www.myurl.com";
$post_fields = 'postvars=val1amp;postvars2=val2';
$headers = ['Content-Type: application/x-www-form-urlencoded'];
$dat = cUrlGetData($url, $post_fields, $headers);
  

Комментарии:

1. Если кто-то передает пустой массив $ post_fields, например, скажем: cUrlGetData($url, []), то выражение ‘if ($post_fields)’ также будет истинным, и блок if будет выполнен, но выражение ‘if ($post_fields amp;amp; !empty($post_fields))’ не будет истинным, и все будет хорошо 🙂

2. @Vlado заголовки должны передаваться без ключей массива 🙂 CURLOPT_HTTPHEADER: An array of HTTP header fields to set, in the format array('Content-type: text/plain', 'Content-length: 100')