2016-10-26 2 views
0

Possible duplicate QuestionQt는 QUrlQuery 다음과 같이 Qbytearray 토큰

나는 재설정 링크를 생성하고이/토큰을 클라이언트로 전송됩니다 것을 추출한다.

http://localhost:8080/reset/staff&token=pc%22%EF%BF%BD%C6%9Fsktx%EF%BF%BD!%06t%5C%0B 

내가 토큰 QByteArray 필요 저장된 해시에 대한 재설정 요청을 인증하기 :

QByteArray token; 
    token.resize(crypto_pwhash_SALTBYTES); 
    randombytes_buf(token.data(), crypto_pwhash_SALTBYTES); 

    QUrlQuery token_url("http://localhost:8080/reset/staff"); 
    token_url.addQueryItem("token", token); 
    token_url.query(QUrl::FullyEncoded).toUtf8(); 

이 올바른 출력을 생성 나타납니다.

QByteArray path = request.getPath(); 
qDebug() << path; 

QUrlQuery token_url(path); 
QString token(token_url.queryItemValue("token")); 
qDebug() << token; 

qDebug() << QUrl::fromPercentEncoding(path); 

파이어 폭스에서 붙여 넣기 URL을 포함하여 출력 내가 아마 강아지 서명 숯불의 Converstion을하고있어 이해

"/reset/staff&token=pc\"\xEF\xBF\xBD\xC6\x9Fsktx\xEF\xBF\xBD!\x06t\\\x0B" 
"pc\"�Ɵsktx�!%06t\\%0B" 
"/reset/staff&token=pc\"�Ɵsktx�!\u0006t\\\u000B" 

횡설수설이다.

QUrlQuery 안팎에 QBytearrays를 전달하는 세련된 방법은 무엇입니까?

저는 일부 프로그래머가 자신의 URL 파서를 작성하는 것을 보았지만 과도한 것으로 보입니다.

답변

0

[해결] QtWebApps의 HttpRequest :: decodeRequestParams()와 함께 문제가 발생했습니다. URL이 두 번 더 디코딩되는 중입니다. QUrlQuery.query()는 예상대로 조용하게 작동하지 않습니다.

K.I.S.S는 사람이 더 우아한 해결책을 가지고있는 경우

split the query from "?" 
then split at "&" into key=value pairs 
then split at "=" 
finally QByteArray::fromPercentEncoding(key) 
finally QByteArray::fromPercentEncoding(value) 

내가 개선을 열어주는 말들 수신 측에 URL을 수동으로

QByteArray url("http://localhost:8080/reset/staff?"); 
url.append("&token="+token.toPercentEncoding()); 

qDebug() << url; 

인코딩.