1

Coral CDNを使用してURLを読み込もうとしていますが、独自のコンテキストリソースを使用すると機能しませんでした。

<?php
$url = 'http://www.stackoverflow.com/';
echo substr(htmlentities(file_get_contents($url)),0,100); // works OK

echo '<hr />';

$url = 'http://www.stackoverflow.com.nyud.net/'; // CORAL content distribution network
echo substr(htmlentities(file_get_contents($url)),0,100); // works OK

echo '<hr />';

$options = array(
      'http'=>array(
        'method'=>"POST",
        'header'=>
            "Host: www.stackoverflow.com.nyud.net\r\n".
            "Connection: keep-alive\r\n".
            "Content-Length: 3\r\n".
            "Cache-Control: max-age=0\r\n".
            "Origin: http://www.stackoverflow.com.nyud.net\r\n".
            "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1\r\n".
            "Content-Type: application/x-www-url-form-encoded\r\n".
            "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n".
            "Accept-Encoding: gzip,deflate,sdch\r\n".
            "Accept-Language: en-US,en;q=0.8\r\n".
            "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3",
         'content'=>'a=1'
    ));
$context = stream_context_create($options);
echo file_get_contents($url,false,$context); // 405 error?
?>

これは私が得る実際のエラーです:

警告:file_get_contents(http://www.stackoverflow.com.nyud.net/)[function.file-get-contents]:ストリームを開くことができませんでした:HTTPリクエストが失敗しました!C:\ ... \ lab \ php-exec \index.php(4)のHTTP / 1.0 405 : 29目のeval()コード

curlが機能する可能性があることはわかっていますが、 file_get_contents()を使用するように主張していますが、この問題をどのように解決できると思いますか?

ありがとう!

4

2 に答える 2

1

そうですね、 POSTリクエストをWebサイトに送信することはできないと思います。基本的な投稿を参照してください。*.nyud.net

リクエスト:

POST / HTTP/1.1
Host: www.stackoverflow.com.nyud.net
Accept: */*
Content-Length: 3
Content-Type: application/x-www-form-urlencoded

a=1

応答:

HTTP/1.0 405
date: Thu, 04 Oct 2012 21:53:32 GMT
server: CoralWebPrx/0.1.20 (See http://coralcdn.org/)
content-type: text/html
connection: close

これは、任意のWebサイトのCDNとして機能するため、正常のように見えます。Webサイトに問題がないかどうかは関係ありません。

POSTリクエストは、Webサイトに何かを送信したり、作成、更新したりすることを意味するため、CoralCDNは、他のWebサイトに代わって何かを送信できないため、それを処理できません。セキュリティ上の問題である可能性があります。誰も彼らが望むものを匿名でウェブサイトに投稿することはできません...

リクエストにパラメータを送信する場合は、それらをURLに入れます(GETリクエストはOKです)が、cURLを使用しても、CoralCDNにPOSTリクエストを送信するソリューションはありません。

于 2012-10-04T22:03:58.953 に答える
0

エラー405は、「この要求メソッドは許可されていません」を意味します。

リクエストメソッドをPOSTからGETに変更できます。それはうまくいくかもしれません。

<?php
$url = 'http://www.stackoverflow.com.nyud.net/';
$options = array(
        'http'=>array(
        'method'=>"GET",
        'header'=>"Accept-language: en\r\n"
  )
);

$context = stream_context_create($options);
echo file_get_contents($url,false,$context); //works
于 2012-09-28T09:19:06.270 に答える