2012-05-14 5 views
1

POST結果を取得しようとしていますが、サーバーがブロックしています。 私はPOSTデータをURLに設定して結果を文字列変数に取得する方法

  • fsockopenの
  • カールと
  • のfile_get_contents

を試してみましたが、私は "アクセスが拒否された" のeroorマッサージなどのサーバーから同じ結果を得ました。

ブロックサーバーからPOST結果を取得する方法はありますか。

<?php 
$post_arr = array ("regno" => "1"); 
    $addr = 'url'; 

    $fp = fsockopen($addr, 80, $errno, $errstr, 30); 
    if (!$fp) { 
     echo "$errstr ($errno)<br />\n"; 
    } else { 

     $req = ''; 
     foreach ($post_arr as $key => $value) { 
      $value = urlencode(stripslashes($value)); 
      $req .= "&" . $key . "=" . $value; 
     } 


     $header = "POST /cgi-bin/webscr HTTP/1.0\r\n"; 
     $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; 
     $header .= "Content-Length: " . strlen($req) . "\r\n\r\n"; 
     fwrite($fp, $header); 
     while (!feof($fp)) { 
      echo fgets($fp, 128); 
     } 
     fclose($fp); 
    } 
?> 

とも

<?php 
    $postdata = http_build_query( 
     array( 
      'regno' => 1 
     ) 
    ); 

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

    $context = stream_context_create($opts); 

    $result = file_get_contents('url', false, $context); 
    echo $result; 
?> 

どちらも上記の方法は、私にアクセス拒否された出力を与えます。

+2

アクセスがアクセス拒否です。サーバーがあなたを魅了していないなら、あなたは入り込まないでしょう。サーバーのロックアウトを迂回するために、あなたはあなたの邪魔をすることができると思いますか?セキュリティガードが銀行の保管庫へのアクセスを拒否した場合、あなたのシャツの色を変更することは、保管庫に入らないという事実を変更することはありません。 –

+0

手動で動作しますか?その場合は、ChromeデベロッパーツールまたはFirebugを使用して送信されたリクエストヘッダーを確認し、cURLを使用してそれらを模倣したいとします。 – Ansari

答えて

2

HTTP_REFERER変数を設定してみてください。

'header' => "Content-type: application/x-www-form-urlencoded\r\nReferer: http://urltopost\r\n", 

これでうまくいかない場合は、さらにヘッダーを模倣してみてください。これは私がChromeデベロッパーツールのネットワークタブを見てから持っているものです。

POST /hse/result.asp HTTP/1.1 
Host: urlhost 
Connection: keep-alive 
Content-Length: 17 
Cache-Control: max-age=0 
Origin: url 
User-Agent: something 
Content-Type: application/x-www-form-urlencoded 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Referer: url 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-US,en;q=0.8 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Cookie: ASPSESSIONIDASRCTADA=FBHLDODAOCBACEKMNFLJIMGO 

編集作業コード含める:あなたは$を交換する場合 をこれであなたの2番目のコードスニペットの定義を付き合えない、それは動作します。わたしにはできる。

$opts = array('http' => 
    array( 
     'method' => 'POST', 
     'header' => "Content-type: application/x-www-form-urlencoded\r\n" 
        ."Referer: url\r\n", 
     'content' => $postdata 
    ) 
); 

全コード:拒否されました

<?php 
$postdata = http_build_query(array('regno' => 1)); 
$opts = array('http' => array('method' => 'POST', 'header' => "Content-type: application/x-www-form-urlencoded\r\n" ."Referer: urltopost\r\n", 'content' => $postdata)); 
$context = stream_context_create($opts); 
$result = file_get_contents('urltopost', false, $context); 
echo $result; 
?> 
+0

アンサリの返事をありがとう。私は 'ヘッダー'も変更してみましたが、同じ結果のアクセスが拒否されました。私はprogramminでもとても新しいです。私を案内してください。あなたに感謝します。 – Bishu

+0

作業コードで編集 – Ansari

+0

ありがとうございます。しかし、それは働かない。私も$ optsの定義を変更しました。 – Bishu

関連する問題