gpt4 book ai didi

c++ - 如何设置 QNetworkReply 属性以获得正确的 NCBI 页面?

转载 作者:行者123 更新时间:2023-11-28 01:11:54 25 4
gpt4 key购买 nike

我尝试使用 downloadURL 函数获取以下 url,如下所示:

http://www.ncbi.nlm.nih.gov/nuccore/27884304

但是数据并不像我们通过浏览器看到的那样,现在我知道这是因为需要一些正确的信息(比如浏览器类型)。我怎么知道我需要设置什么样的信息,我又该如何设置呢? (通过 setHeader 函数或其他方式??)

在VC++中,我们可以使用CInternetSession和CHttpConnection对象来获取正确的数据,而无需设置任何其他详细信息,Qt或其他跨平台C++网络库中有类似的方法吗? (是的,我需要跨平台属性。)

QNetworkReply::NetworkError downloadURL(const QUrl &url, QByteArray &data) {
QNetworkAccessManager manager;
QNetworkRequest request(url);
request.setHeader(QNetworkRequest::ContentTypeHeader ,"Mozilla/5.0 (Windows; U; Windows NT
6.0; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)");
QNetworkReply *reply = manager.get(request);

QEventLoop loop;
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();


QVariant statusCodeV = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
QUrl redirectTo = statusCodeV.toUrl();

if (!redirectTo.isEmpty())
{
if (redirectTo.host().isEmpty())
{
const QByteArray newaddr = ("http://"+url.host()+redirectTo.encodedPath()).toAscii();
redirectTo.setEncodedUrl(newaddr);
redirectTo.setHost(url.host());
}
return (downloadURL(redirectTo, data));
}

if (reply->error() != QNetworkReply::NoError)
{
return reply->error();
}
data = reply->readAll();
delete reply;
return QNetworkReply::NoError; }

通过VC,我们就可以做到这一点,那么正确的数据就在CHttpFile中。

CString downloadURL (CString sGetFromURL)
{
// create an internet session
CInternetSession csiSession;

int pos;
BOOL neof;

// parse URL to get server/object/port

DWORD dwServiceType;
CString sServerName;
CString sObject;
INTERNET_PORT nPort;
CHttpConnection* pHTTPServer = NULL;
CHttpFile* pFile = NULL;


AfxParseURL ( sGetFromURL, dwServiceType, sServerName, sObject, nPort );

// open HTTP connection
pHTTPServer = csiSession.GetHttpConnection ( sServerName, nPort );

// get HTTP object
pFile = pHTTPServer->OpenRequest ( CHttpConnection::HTTP_VERB_GET, sObject, NULL, 1, NULL, NULL, INTERNET_FLAG_RELOAD );

pFile->SendRequest();

}

最佳答案

您设置了错误的 Content-Type header 。您提供的值适合更多 User-Agent header

关于c++ - 如何设置 QNetworkReply 属性以获得正确的 NCBI 页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2576117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com