1

PHPで同じソケットを介してデータを取得および投稿する方法は? 私はこのコードを持っています:

$fp = fsockopen("ssl://ovi.rdw.nl", 443, $errno, $errstr, 30);
if(!$fp){
    echo $errstr;
}else{
$post_data = 'ctl00$cntMaincol$btnZoeken=Zoeken&ctl00$cntMaincol$txtKenteken=83FHVN';

$out = "GET /Default.aspx HTTP/1.0\r\n";
$out .= "Host: ovi.rdw.nl\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);

while(!feof($fp)){
    $data = fgets($fp);
    $view_state = getViewState($data);
    if($view_state != ""){
        echo $view_state."<br />";
        break;
    }
}

$post_data = "__VIEWSTATE={$view_state}&".$post_data;

$out = "POST /Default.aspx HTTP/1.0\r\n";
$out .= "Host: ovi.rdw.nl\r\n";
$out .= "Content-type: application/x-www-form-urlencoded\r\n";
$out .= "Content-length: " . strlen($post_data) . "\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
fwrite($fp, $post_data);
while(!feof($fp)){
    echo fgets($fp);
}
}

データは正しく取得できますが、投稿はうまくいきません。私は何が恋しいですか?

4

3 に答える 3

1

同じ接続でGETとPOSTを実行しています。これは、接続を介して指定および再保証したHTTP / 1.0には無効です:close。get部分をコメントアウトして、投稿するだけです。

投稿でデータを取り戻すことができるので、取得と投稿を行う必要はありません。または、getとpostを実行する必要がある場合は、ソケットを閉じてから、post用にソケットを再確立します。

于 2010-11-09T15:31:11.607 に答える
0

することを忘れないでくださいfflush()

于 2010-11-09T15:26:10.857 に答える
0

post_to_host() を使用するには Curl が重すぎる場合があります。

//GET:
$str_rtn=post_to_host($str_url_target, array(), $arr_cookie, $str_url_referer, $ref_arr_head, 0);

//POST:
$arr_params=array('para1'=>'...', 'para2'=>'...');
$str_rtn=post_to_host($str_url_target, $arr_params, $arr_cookie, $str_url_referer, $ref_arr_head);

//POST with file:
$arr_params=array('para1'=>'...', 'FILE:para2'=>'/tmp/test.jpg', 'para3'=>'...');
$str_rtn=post_to_host($str_url_target, $arr_params, $arr_cookie, $str_url_referer, $ref_arr_head, 2);

//raw POST:
$tmp=array_search('uri', @array_flip(stream_get_meta_data($GLOBALS[mt_rand()]=tmpfile())));
$arr_params=array('para1'=>'...', 'para2'=>'...');
file_put_contents($tmp, json_encode($arr_params));
$arr_params=array($tmp);
$str_rtn=post_to_host($str_url_target, $arr_params, $arr_cookie, $str_url_referer, $ref_arr_head, 3);

//get cookie and merge cookies:
$arr_new_cookie=get_cookies_from_heads($ref_arr_head)+$arr_old_cookie;//don't change the order

//get redirect url:
$str_url_redirect=get_from_heads($ref_arr_head, 'Location');

php プロジェクトの場所をホストする投稿: http://code.google.com/p/post-to-host/

于 2012-01-05T06:53:31.107 に答える