QNetworkAccessManager를 사용하여 URL에 데이터를 게시하는 방법
Qt를 사용하여 일부 데이터를 게시하는 데 필요한 웹 서비스가 있습니다. 웹 서비스에 게시 할 때 QByteArray를 사용할 수 있다고 생각했습니다.
내 질문은 다른 쪽 끝에서 올바르게 구문 분석하기 위해이 배열을 어떻게 포맷 할 수 있습니까?
이것은 지금까지 가지고있는 코드입니다.
// Setup the webservice url
QUrl serviceUrl = QUrl("http://myserver/myservice.asmx");
QByteArray postData;
/*
Setup the post data somehow
I want to transmit:
param1=string,
param2=string
*/
// Call the webservice
QNetworkAccessManager *networkManager = new QNetworkAccessManager(this);
connect(networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(serviceRequestFinished(QNetworkReply*)));
networkManager->post(QNetworkRequest(serviceUrl), postData);
감사!
나는 다음을 사용했다 :
QByteArray postData;
postData.append("param1=string&");
postData.append("param2=string");
따라서 각 매개 변수 다음에 개행 대신 &.
일부 매개 변수 및 값은 utf-8 및 백분율 인코딩 (공백, &, =, 특수 문자 ...)이 필요할 수 있으므로 게시 된 문자열을 빌드하려면 ( QUrl
Qt 4의 경우) 또는 QUrlQuery
(Qt 5의 경우)를 사용해야 합니다.
Qt 4의 예제 코드 :
QUrl postData;
postData.addQueryItem("param1", "string");
postData.addQueryItem("param2", "string");
...
QNetworkRequest request(serviceUrl);
request.setHeader(QNetworkRequest::ContentTypeHeader,
"application/x-www-form-urlencoded");
networkManager->post(request, postData.encodedQuery());
과에 대한 Qt는 5 :
QUrlQuery postData;
postData.addQueryItem("param1", "string");
postData.addQueryItem("param2", "string");
...
QNetworkRequest request(serviceUrl);
request.setHeader(QNetworkRequest::ContentTypeHeader,
"application/x-www-form-urlencoded");
networkManager->post(request, postData.toString(QUrl::FullyEncoded).toUtf8());
Qt 4.8부터 파일을 업로드해야하는 경우 QHttpMultiPart 를 사용할 수도 있습니다 .
Qt5에 대한 alexisdm 답변 업데이트 :
// Setup the webservice url
QUrl serviceUrl = QUrl("http://your.url");
QByteArray postData;
QUrlQuery query;
query.addQueryItem("param1","string1");
query.addQueryItem("param2","string2");
postData = query.toString(QUrl::FullyEncoded).toUtf8();
// Call the webservice
QNetworkAccessManager *networkManager = new QNetworkAccessManager(this);
connect(networkManager, SIGNAL(finished(QNetworkReply*)),
SLOT(onPostAnswer(QNetworkReply*)));
QNetworkRequest networkRequest(serviceUrl);
networkRequest.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
networkManager->post(networkRequest,postData);
Don't forget to include
QT += network
in .pro.
the actually answer is
QByteArray postData;
postData.append("param1=string&");
postData.append("param2=string");
NOTE: use "&" here!!!.
I didn't notice Juha's answer here, and waste much time on testing my code using the ",\n" approach.
Please change the correct answer to Juha's.
Here is another way to handle this, i am using your code also to give a complete code:
// Setup the webservice url
QUrl serviceUrl = QUrl("http://myserver/myservice.asmx");
QByteArray postData;
QUrl params;
params.addQueryItem("param1","string1");
params.addQueryItem("param2","string2");
postData = params.encodedQuery();
// Call the webservice
QNetworkAccessManager *networkManager = new QNetworkAccessManager(this);
connect(networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(serviceRequestFinished(QNetworkReply*)));
networkManager->post(QNetworkRequest(serviceUrl), postData);
QByteArray postData;
postData.append("param1=string,\n");
postData.append("param2=string\n");
ReferenceURL : https://stackoverflow.com/questions/2599423/how-can-i-post-data-to-a-url-using-qnetworkaccessmanager
'code' 카테고리의 다른 글
React는 자동 완성을 렌더링하지 않습니다. (0) | 2020.12.27 |
---|---|
가장 최근 레코드를 검색하는 SQL 쿼리 만들기 (0) | 2020.12.27 |
아키텍처 i386 clang에 대한 중복 기호 (0) | 2020.12.26 |
Perl로 C를 쓰는 사람을 고용해야합니까? (0) | 2020.12.26 |
인라인 문자열 사용과 php5에서 연결의 속도 차이는 무엇입니까? (0) | 2020.12.26 |