• curl 设置头部


    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    
    <?php
    function FormatHeader($url, $myIp = null,$xml = null)
    {
        // 解悉url
        $temp = parse_url($url);
        $query = isset($temp['query']) ? $temp['query'] : '';
        $path = isset($temp['path']) ? $temp['path'] : '/';
        $header = array (
            "POST {$path}?{$query} HTTP/1.1",
            "Host: {$temp['host']}",
            "Content-Type: text/xml; charset=utf-8",
            'Accept: */*',
            "Referer: http://{$temp['host']}/",
            'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1)',
            "X-Forwarded-For: {$myIp}",
            "Content-length: " . strlen($xml) ."
    
    " .$xml, //修改1
            "Connection: Close"
        );
        return $header;
    }
    $xml = '<?xml version="1.0" encoding="utf-8"?> //修改2
     <profile>
     <sha1>adsfadsf</sha1>
     <user_id>asdfasdf</user_id>
     <album_id>asdf</album_id>
     <album_name>asdf</album_name>
     <tags>asdfasd</tags>
     <title>asdfasdf</title>
     <content>asdfadsf</content>
     <type>asdfasdf</type>
     <copyright>asdfasdf</copyright>
     </profile>';
    $interface = 'http://wang.com/curl/header2.php';
    $header = FormatHeader($interface,'10.1.11.1',$xml); //修改3
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $interface);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header); //设置头信息的地方
    curl_setopt($ch, CURLOPT_HEADER, 1); //不取得返回头信息
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $result = curl_exec($ch);
    var_dump($result);
    ?>
     
    

      

    <?php
    /**
     * Created by PhpStorm.
     * User: brady
     * Date: 2017/12/11
     * Time: 19:50
     */
    
    //print_r($_SERVER); //头信息里面有内容绝大部分是放在系统变量里面的
    $raw_post_data = file_get_contents('php://input', 'r');
    var_dump($raw_post_data);
    

      参考

    http://www.jb51.net/article/78609.htm

    本文实例讲述了PHP设置头信息及取得返回头信息的方法。分享给大家供大家参考,具体如下:

    设置请求的头信息,我们可以用header函数,可以用fsockopen,可以用curl等,本文主要讲的是用curl来设置头信息,并取得返回后的头信息。

    一、请求方设置自己的头信息,header.php

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <?php
    function FormatHeader($url, $myIp = null,$xml = null)
    {
     // 解悉url
     $temp = parse_url($url);
     $query = isset($temp['query']) ? $temp['query'] : '';
     $path = isset($temp['path']) ? $temp['path'] : '/';
     $header = array (
     "POST {$path}?{$query} HTTP/1.1",
     "Host: {$temp['host']}",
     "Content-Type: text/xml; charset=utf-8",
     'Accept: */*',
     "Referer: http://{$temp['host']}/",
     'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1)',
     "X-Forwarded-For: {$myIp}",
     "Content-length: 380",
     "Connection: Close"
     );
     return $header;
    }
    $header = FormatHeader($interface,'10.1.11.1');
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $interface);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header); //设置头信息的地方
    curl_setopt($ch, CURLOPT_HEADER, 0); //不取得返回头信息
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $result = curl_exec($ch);
    var_dump($result);
    ?>

    二、被请求方,取得头信息,header2.php

    1
    2
    3
    <?php
    print_r($_SERVER); //头信息里面有内容绝大部分是放在系统变量里面的
    ?>

    三、看一下header.php请求的结果

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    string(1045) "Array
    (
    [HTTP_HOST] => localhost
    [CONTENT_TYPE] => text/xml; charset=utf-8
    [HTTP_ACCEPT] => */*
    [HTTP_REFERER] => http://localhost/
    [HTTP_USER_AGENT] => Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1)
    [HTTP_X_FORWARDED_FOR] => 10.1.11.1
    [CONTENT_LENGTH] => 380
    [PATH] => /usr/local/bin:/usr/bin:/bin
    [SERVER_SIGNATURE] => <address>Apache/2.2.16 (Ubuntu) Server at localhost Port 80</address>
    。。。。。。。。。。。。。。。。。。。。。。。。。。。。
    )

    上面那几个,我们可以明显看到,是我设置的头信息。

    四、取得返回的头信息

    复制代码 代码如下:
    curl_setopt($ch, CURLOPT_HEADER, 1); //取得返回头信息

    我们把CURLOPT_HEADER设置成1,在取得的结果当中,显示数组的前面会有这些信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    string(1239) "HTTP/1.1 200 OK
    Date: Fri, 27 May 2011 01:57:57 GMT
    Server: Apache/2.2.16 (Ubuntu)
    X-Powered-By: PHP/5.3.3-1ubuntu9.5
    Vary: Accept-Encoding
    Content-Length: 1045
    Content-Type: text/html
    Array
    (
     [HTTP_HOST] => localhost
     [CONTENT_TYPE] => text/xml; charset=utf-8
     [HTTP_ACCEPT] => */*

    五、$_SERVER部分头信息是拿不到的

    修改一下header.php

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <?php
    function FormatHeader($url, $myIp = null,$xml = null)
    {
     // 解悉url
     $temp = parse_url($url);
     $query = isset($temp['query']) ? $temp['query'] : '';
     $path = isset($temp['path']) ? $temp['path'] : '/';
     $header = array (
     "POST {$path}?{$query} HTTP/1.1",
     "Host: {$temp['host']}",
     "Content-Type: text/xml; charset=utf-8",
     'Accept: */*',
     "Referer: http://{$temp['host']}/",
     'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1)',
     "X-Forwarded-For: {$myIp}",
     "Content-length: " . strlen($xml) ." " .$xml, //修改1
     "Connection: Close"
     );
     return $header;
    }
    $xml = '<?xml version="1.0" encoding="utf-8"?> //修改2
     <profile>
     <sha1>adsfadsf</sha1>
     <user_id>asdfasdf</user_id>
     <album_id>asdf</album_id>
     <album_name>asdf</album_name>
     <tags>asdfasd</tags>
     <title>asdfasdf</title>
     <content>asdfadsf</content>
     <type>asdfasdf</type>
     <copyright>asdfasdf</copyright>
     </profile>';
    $header = FormatHeader($interface,'10.1.11.1',$xml); //修改3
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $interface);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header); //设置头信息的地方
    curl_setopt($ch, CURLOPT_HEADER, 0); //不取得返回头信息
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $result = curl_exec($ch);
    var_dump($result);
    ?>

    如果这样的话,header2.php里面,打印$_SERVER不可能把头信息中的xml打印出来。这个时候,我们在header2.php后面加上以下二行

    1
    2
    $raw_post_data = file_get_contents('php://input', 'r');
    var_dump($raw_post_data);

    这样就可以取到$xml的内容,并且只会取$xml的内容。

  • 相关阅读:
    seajs加载angularjs
    seajs加载jquery提示$ is not a function
    java 动态代理
    C#第三章--对象和类
    Android笔记--两种双击退出程序的方法
    Android--Volley基本用法及自定义
    Win10专业版只要12.99元?应用商店Bug福利也算数
    新人报道
    排序

  • 原文地址:https://www.cnblogs.com/brady-wang/p/8024855.html
Copyright © 2020-2023  润新知