restful介面中指定application/x-www-form-urlencoded的問題

來源:互聯網
上載者:User

標籤:restful & application/x-www-form-urlencoded

    application/x-www-form-urlencoded指定了發送的POST資料,要進行URL編碼,但是前面的&,=用在POST報文前面,作為參數的時候,是不需要進行編碼的,可以直接跳過。例如:

loginusername=admin&loginpassword=admin&param={JSON報文}

對於前面的兩個&&都不能進行編碼,否則Java後台無法正常解析出POST資料。目前JSON報文裡面存在一個uri:

http://192.168.0.225:8080/kms/services/rest/dataInfoService/downloadFileid=00000001/temp001/097_5848300_10488&token=7a57a5a7ffffffffc1a0316369671314

裡面存在&,如果沒有進行URL編碼的話,Java後台無法正常解析出報文

因此對以前的url編碼函數進行了簡單的處理

std::string UrlEncode(const std::string& str)

{

std::string strTemp = "";

size_t length = str.length();

for (size_t i = 0; i < length; i++)

{

/*

前面的&用來對多個參數索引值進行區分,不能進行編碼,後面的&必須進行編碼

*/

if (i < 50 && str[i] == ‘&‘)

{

strTemp += str[i];

continue;

}

if (isalnum((unsigned char)str[i]) ||

(str[i] == ‘-‘) ||

(str[i] == ‘_‘) ||

(str[i] == ‘.‘) ||

(str[i] == ‘~‘) ||

(str[i] == ‘=‘))

strTemp += str[i];

else if (str[i] == ‘ ‘)

strTemp += "+";

else

{

strTemp += ‘%‘;

strTemp += ToHex((unsigned char)str[i] >> 4);

strTemp += ToHex((unsigned char)str[i] % 16);

}

}

return strTemp;

}


50是一個大致的數字,目前暫時沒有考慮其他的通用做法


restful介面中指定application/x-www-form-urlencoded的問題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.