如何使用PHP发送POST请求?

其实我想读取搜索查询后的内容,当它完成时。 问题是该URL只接受POST方法,并且不会对GET方法执行任何操作...

我必须在domdocumentfile_get_contents()的帮助下阅读所有内容。 有没有什么方法可以让我用POST方法发送参数,然后通过PHP读取内容?


使用PHP5的CURL-less方法:

$url = 'http://server.com/path';
$data = array('key1' => 'value1', 'key2' => 'value2');

// use key 'http' even if you send the request to https://...
$options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencodedrn",
        'method'  => 'POST',
        'content' => http_build_query($data)
    )
);
$context  = stream_context_create($options);
$result = file_get_contents($url, false, $context);
if ($result === FALSE) { /* Handle error */ }

var_dump($result);

有关该方法以及如何添加标头的更多信息,请参阅PHP手册,例如:

  • stream_context_create :http://php.net/manual/en/function.stream-context-create.php

  • 我确实尝试过这个,它工作的很好......正如我所知道的那样..

    <?php
    $url = $file_name;
    $fields = array(
                '__VIEWSTATE'=>urlencode($state),
                '__EVENTVALIDATION'=>urlencode($valid),
                'btnSubmit'=>urlencode('Submit')
            );
    
    //url-ify the data for the POST
    foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
    $fields_string = rtrim($fields_string,'&');
    
    //open connection
    $ch = curl_init();
    
    //set the url, number of POST vars, POST data
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_POST,count($fields));
    curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
    
    //execute post
    $result = curl_exec($ch);
    print $result;
    ?>
    

    我使用以下函数使用curl发布数据。 $ data是要发布的字段数组(将使用http_build_query正确编码)。 数据使用application / x-www-form-urlencoded进行编码。

    function httpPost($url, $data)
    {
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        $response = curl_exec($curl);
        curl_close($curl);
        return $response;
    }
    

    @Edward提到可以省略http_build_query,因为curl会正确编码传递给CURLOPT_POSTFIELDS参数的数组,但是请注意,在这种情况下,数据将使用multipart / form-data编码。

    我将这个函数用于希望使用application / x-www-form-urlencoded编码数据的API。 这就是为什么我使用http_build_query()。

    链接地址: http://www.djcxy.com/p/7033.html

    上一篇: How do I send a POST request with PHP?

    下一篇: How to make HTTP POST web request