如何使用PHP發送POST請求?


Answers

我確實嘗試過這個,它工作的很好......正如我所知道的那樣..

<?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;
?>
Question

其實我想讀取搜索查詢後的內容,當它完成時。 問題是該URL只接受POST方法,並且不會對GET方法執行任何操作...

我必須在domdocumentfile_get_contents()的幫助下閱讀所有內容。 有沒有什麼方法可以讓我用POST方法發送參數,然後通過PHP讀取內容?




更靈活的功能。 這可以使用或不使用CURL。

public function http_post($url){
        $postdata = array();

        if(strpos($url,"?") !== FALSE){
            $qsr = array();
            $url_r = explode("?", $url);
            $url = $url_r[0];
            parse_str($url_r[1], $qsr);
            $postdata = http_build_query($qsr);
        }

        $opts = array('http' =>
            array(
                'method'  => 'POST',
                'header'  => 'Content-type: application/x-www-form-urlencoded',
                'content' => $postdata
            )
        );

        $context  = stream_context_create($opts);
        $output = @file_get_contents($url, false, $context);

        if($output === FALSE) {
            if (function_exists('curl_init')){ 
                $ch = curl_init();
                curl_setopt($ch, CURLOPT_URL, $url);
                curl_setopt($ch, CURLOPT_POST, 1);
                curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                $output = curl_exec($ch);
                curl_close ($ch);
            }
        }
        return $output;
    }

用法:

$output = http_post("https://www.example.com?secret=ALDJFNEK&response=123&remoteip=127.0.0.1");



我建議您使用經過完全單元測試並使用最新編碼實踐的開放源代碼包guzzle

安裝Guzzle

轉到項目文件夾中的命令行並鍵入以下命令(假設您已經安裝了包管理器composer )。 如果你需要幫助如何安裝Composer, 你應該看看這裡

php composer.phar require guzzlehttp/guzzle

使用Guzzle發送POST請求

Guzzle的使用非常簡單,因為它使用了一個輕量級的面向對象的API:

// Initialize Guzzle client
$client = new GuzzleHttp\Client();

// Create a POST request
$response = $client->request(
    'POST',
    'http://example.org/',
    [
        'form_params' => [
            'key1' => 'value1',
            'key2' => 'value2'
        ]
    ]
);

// Parse the response object, e.g. read the headers, body, etc.
$headers = $response->getHeaders();
$body = $response->getBody();

// Output headers and body for debugging purposes
var_dump($headers, $body);



試試PEAR的HTTP_Request2包來輕鬆發送POST請求。 或者,您可以使用PHP的curl函數或使用PHP 流上下文

HTTP_Request2還可以模擬出服務器,因此您可以輕鬆地對代碼進行單元測試




我正在尋找類似的問題,並找到了一個更好的方法來做到這一點。 所以在這裡。

你可以簡單地把下面一行放在重定向頁面上(比如page1.php)。

header("Location: URL", TRUE, 307); // Replace URL with to be redirected URL, e.g. final.php

我需要這個重定向POST請求REST API調用。 此解決方案可以重定向發布數據以及自定義標題值。

這裡是參考鏈接




如果您有機會使用Wordpress開發您的應用程序(即使是非常簡單的東西,它實際上也是獲得授權,信息頁等的便捷方式),您可以使用以下代碼片段:

$response = wp_remote_post( $url, array('body' => $parameters));

if ( is_wp_error( $response ) ) {
    // $response->get_error_message()
} else {
    // $response['body']
}

它使用不同的方式來製作實際的HTTP請求,具體取決於Web服務器上可用的內容。 有關更多詳細信息,請參閱HTTP API文檔

如果您不想開發自定義主題或插件來啟動Wordpress引擎,則可以在wordpress根目錄中的隔離PHP文件中執行以下操作:

require_once( dirname(__FILE__) . '/wp-load.php' );

// ... your code

它不會顯示任何主題或輸出任何HTML,只需使用Wordpress API即可!