複数のサイトにPOSTデータを送信し非同期でHTMLを取得するプログラムが書けません。
POSTデータなしで複数のURLからHTMLを非同期で取得することと、POSTデータを送信してサイトからHTMLを取得すること(1つのみ)はできました。
以下のサイトのプログラムを組み合わせればできるかと思い、POSTがあるときとないときをif文で分ければ良いと思ったのですが、上手くできませんでした。
回答よろしくお願い致します。
[PHP]file_get_contenst()で複数サイトのhtmlを非同期・高速に取得する | nanoblog
http://nanoappli.com/blog/archives/5743
file_get_contentsでPOSTデータ送信 - Qiita
https://qiita.com/songfei1983/items/fad52c87f84999fb0a45
回答を受けていま現時点でのプログラムを以下に追記しました。
質問をしてからプログラムを修正していたら非同期で取得することはなんとかできましたのですが、以下のプログラムを実行するとPOSTで取得したHTMLが画面に表示されてしまします。
元々の質問からは外れてしまいましたが、回答よろしくお願い致します。
lang
1//取得したいページのURL 2$url = array(); 3$url[] = ''; 4$url[] = ''; 5 6//POSTするkey 7$postName = array(); 8$postName[] = ''; 9$postName[] = ''; 10 11//POSTする値 12$postValue = array(); 13$postValue[] = ''; 14$postValue[] = ''; 15 16$htmlText = getHtml( $url, $postName, $postValue); 17 18if (!function_exists('getHtml')){ 19 function getHtml( $urlList, $postName, $postValue ) { 20 $resList = array(); 21 22 $handle = curl_multi_init(); 23 24 for($n = 0; $n < count($urlList); $n++){ 25 $res = curl_init( $urlList[$n] ); 26 27 if (!empty($postName[$n])){ 28 $postData = array( $postName[$n] => $postValue[$n] ); 29 curl_setopt( $res, CURLOPT_POST, TRUE); 30 curl_setopt( $res, CURLOPT_POSTFIELDS, http_build_query($postData)); 31 }else{ 32 curl_setopt( $res, CURLOPT_RETURNTRANSFER, TRUE ); 33 } 34 35 curl_multi_add_handle( $handle, $res ); 36 37 $resList[] = $res; 38 } 39 40 do { 41 curl_multi_exec( $handle, $isRunning ); 42 } while ( $isRunning ); 43 44 $htmlTextList = array(); 45 foreach ( $resList as $res ) { 46 $htmlTextList[] = curl_multi_getcontent( $res ); 47 } 48 49 foreach ( $resList as $res ) { 50 curl_multi_remove_handle( $handle, $res ); 51 curl_close( $res ); 52 } 53 54 curl_multi_close( $handle ); 55 56 return $htmlTextList; 57 } 58} 59add_shortcode('getHtml', 'getHtml');
回答2件
あなたの回答
tips
プレビュー