在公司的時候,需要新增1000多條的促銷,促銷那邊因為是Java組開發的,所以具體怎么回事我們Python組並不知道,測試人員需要加入促銷1000多進行壓測,所以任務就到了我們Python這邊。
打開控制台,我們可以看到它的請求體其實是Form Data格式的,這時,requests庫中的參數data,json等請求就會出現異常,異常的報錯我這邊遇到的就是param未傳,
解決的辦法也很簡單,因為Form Data的請求其實是multipart/form-data 其實是這種格式的,雖然筆者主要做的是自動化開發,但是有關Python的Django框架也熟悉點,知道這種請求格式其實在Django后台的接受方法應該是 request.Files() 的格式,所以猜測是不是請求體應該用files,然后Ctrl B在pycharm里看了一下reqeusts的源碼,發現還真有一個參數是files,再看一下reqeusts對它的解釋,所以就大膽猜測請求的形參應該就是files。下面呢,是requests對這個files參數的詳細介紹,筆者英文六級沒過,不敢為大家隨意翻譯,請大家自己看吧。
Dictionary of ``'name': file-like-objects`` (or ``{'name': file-tuple}``) for multipart encoding upload.
``file-tuple`` can be a 2-tuple ``('filename', fileobj)``, 3-tuple ``('filename', fileobj, 'content_type')``
or a 4-tuple ``('filename', fileobj, 'content_type', custom_headers)``, where ``'content-type'`` is a string
defining the content type of the given file and ``custom_headers`` a dict-like object containing additional headers
to add for the file.
為此,參數里面已經告知,請求應為{"name",(...)}的形式,所以我的參數初步定為{"param",(具體需要攜帶的數據)},但是請求的時候發現還是失敗,然后仔細閱讀之后,發現落下了一句話:file-tuple
can be a 2-tuple ,那既然我們直接請求是不可以的,我們就才用2元組的形式進行請求,但是參數里面的filename我們沒有,那就是用None來代替,所以改成:{"param":(None,"你需要攜帶的參數")},
果然這樣請求的就沒有問題了。
import requets uparams = {"param":(None,"""攜帶的具體參數""")} rep = requests.post(urlupdata, files=uparmas).json() print(rep)
然后就請求成功了。博客園筆者自己所寫,轉發請標明出處,謝謝讀者。