2016-09-06 22 views
0

私は代わりにブール値のurlとして応答を返したいと思います。私はブラウザからヘッダーを見て、それにマッチしますが、ブール値(1)しか返しません。いくつかのオプションがありますか?cURLでデータを投稿するには?

<?php 

    $ch = curl_init(); 

    $url = 'http://www.tusfiles.net/anfossy50rrd'; 

// Post field and value 
    $post = array(
      'op' => 'download2', 
      'id' => 'anfossy50rrd',   
     'rand' => 'q56tfpiklusrizipkforyjqsykxzqlsi7ur3hyi', 
      'referer' => '',  
     'method_free' => '', 
      'method_premium' => '', 
     'down_script' => '1' 
     ); 

$headers = [ 
     'Host: www.tusfiles.net', 
     'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:28.0) Gecko/20100101 Firefox/28.0', 
     'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
     'Accept-Language: en-US,en;q=0.5', 
     'Accept-Encoding: gzip, deflate', 
     'Cache-Control: no-cache', 
     'Content-Type: application/x-www-form-urlencoded; charset=utf-8', 
     'Referer: http://www.tusfiles.net/anfossy50rrd', 
     'Cookie: lang=english; login=lynxpravoka; xfss=; aff=2513158; __atuvc=17%7C36; 

    __atuvs=57cf088127fd55f9004; cookiescriptaccept=visit', 
     'Connection: keep-alive', 
     'Upgrade-Insecure-Requests: 1' 
    ]; 

    curl_setopt($ch, CURLOPT_URL, $url); 

    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

    curl_setopt($ch, CURLOPT_POSTFIELDS,$post); 

    $server_output = curl_exec ($ch); 

    print_r($server_output); 

    ?> 
+0

PHP5やPHP7として働いていない理由をデバッグするには? ~~ – hanshenrik

+0

のいずれの場合でも、CURLOPT_VERBOSEは出力を出さない理由を教えてください。 – hanshenrik

+0

oh私はあなたの問題を見つけました(CURLOPT_VERBOSEを使用して、自分でコードを試しています)。サーバは 'HTTP/1.1 302 Found'リダイレクト応答を返します。あなたは 'CURLOPT_FOLLOWLOCATION'を持っていないので、curlはそれに従いません。 :) – hanshenrik

答えて

0

あなたはこのようなものを使用する必要があり、そのヘッダ:

curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'X-Header-1: value1', 'X-Header-2: value2' ));

またはあなたはまた、キーがヘッダー名とされ、アレイを構築することができますもちろん、値はヘッダー値です。

$headers = array( 'Host' => 'www.tusfiles.net', 'User-Agent' => 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:28.0) Gecko/20100101 Firefox/28.0' ); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

http://www.php.net/manual/en/function.curl-setopt.php

+0

それでもまだブール値1を返します。 – marcrise

+0

これは成功したことを意味します。リクエストからの出力が必要な場合は、 'curlsetopt($ ch、CURLOPT_RETURNTRANSFER、1);'と 'var_dump($ server_output);'を追加して結果を確認する必要があります。 – john

+0

そのD:\ UwAmp \ www \ index.php:42:文字列 ''(長さ= 0)のみを返します。私はそれがリンクを生成したい。 – marcrise

0

問題は、サーバーが「ある」URLへのリクエストを送信するために期待し、HTTP/1.1 302 Found HTTPリダイレクトを返すということです。それは次のようになります。 CURLOPT_FOLLOWLOCATIONがないため、リダイレクトを手動で処理したり、リダイレクトヘッダーをまったく読み取ったりしないため、リダイレクトは行われません。 CURLOPT_FOLLOWLOCATIONを有効にすると、応答が得られます。

また、 'Accept-Encoding:gzip、deflate'というヘッダーをcurlで手動で渡すべきではありません。 curlが実際にgzipまたはdeflateでコンパイルされておらず、サーバがそれを使用することを決定した場合、転送が失敗します。さらに、サーバとカールの両方がより良い転送エンコーディングをサポートする場合、転送は失敗します。 gzip/deflateだけがサポートされていると明示しています。代わりに、空の文字列 ''をCURLOPT_ENCODINGに渡して、サポートされているすべてのエンコーディングを自動的にカールするようにします。

とprotip:将来的には、カール転送が期待される、CURLOPT_VERBOSEを有効

関連する問題