仅在从Qt连接时返回HTTP 406错误的网页

时间:2013-01-19 17:17:50

标签: qt mod-security qtnetwork

我在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服务器上运行它。

3 个答案:

答案 0 :(得分:9)

我遇到了同样的问题 - 尝试下载文件时出现“不可接受”的错误。我做了一些谷歌搜索和实验,我刚刚发现添加:

request.setRawHeader( "User-Agent" , "Mozilla Firefox" );
在get(request)改变结果之前

。 :)

我猜服务器无法识别 QNetworkRequest 的用户代理,导致406错误消息。 我需要做更多的测试,但我认为我应该分享我的突破。 我希望它有所帮助...

答案 1 :(得分:1)

以下解决方案为我做了一笔交易:

    request.setRawHeader( "Accept" , "*/*" );

答案 2 :(得分:0)

它更像是被阻止的用户代理。将User Agent标头设置为其他任何内容,它应该可以正常工作。

request.setHeader(QNetworkRequest::UserAgentHeader, "Whatever you like");

http://amin-ahmadi.com/2016/06/13/fix-modsecurity-issues-in-qt-network-module-download-functionality/