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 サーバーで動作させる必要があります。