6

http://mlecturedownload.com/test-qt.phpに、次のコードを持つテスト ページをセットアップしました。

<?php

$foo = $_GET['foo'];
if ($foo == "0" || $foo == "1") {
  echo $foo;
} else {
  echo "Invalid foo";
}

Web ブラウザでこのページにアクセスして foo の値を変更すると問題なく動作し、curl を使用しても問題なく動作します。しかし、Qt からリクエストを送信すると、「受け入れられません」という意味の HTTP 406 エラー コードが表示されます。リクエストの仕方は次のとおりです。

void MainWindow::on_send_clicked()
{
    QString url = "http://mlecturedownload.com/test-qt.php?foo=1";

    QNetworkRequest request;
    request.setUrl(QUrl(url));
    nam->get(request); // nam is a QNetworkAccessManager
}

Wireshark から取得した HTTP 要求と応答の全体を次に示します。

GET /test-qt.php?foo=1 HTTP/1.1
Connection: Keep-Alive
Accept-Encoding: gzip, deflate
Accept-Language: en-CA,*
User-Agent: Mozilla/5.0
Host: mlecturedownload.com

HTTP/1.1 406 Not Acceptable
Date: Sat, 19 Jan 2013 17:14:37 GMT
Server: Apache
Content-Length: 275
Keep-Alive: timeout=5, max=75
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1

<head><title>Not Acceptable!</title><script src='/google_analytics_auto.js'></script></head><body><h1>Not Acceptable!</h1><p>An appropriate representation of the requested resource could not be found on this server. This error was generated by Mod_Security.</p></body></html>

mod_security と呼ばれるサーバー上の Apache モジュールが問題を引き起こしているようです。.htaccess を介してこれを無効にする方法はありますが、うまく機能したものはありません。ただし、モジュールを無効にするのではなく、問題を修正したいと思います。誰が何が起こっているのか知っていますか?

編集:私が投稿したサイトへのリンクは、HostGator でホストされています。EC2 サーバーでテスト ページを作成したところ、セキュリティ モジュールが有効になっていないため、問題なく動作しました。HostGator サーバーで動作させる必要があります。

4

3 に答える 3

1

次の解決策は私のために取引をします:

    request.setRawHeader( "Accept" , "*/*" );
于 2015-10-05T14:12:01.070 に答える