1. 程式人生 > >python 用POST請求php,$_POST接收不到訊息

python 用POST請求php,$_POST接收不到訊息

首先來到php文件。已經說的很清楚了。

當 HTTP POST 請求的 Content-Type 是 application/x-www-form-urlencoded 或 multipart/form-data 時,會將變數以關聯陣列形式傳入當前指令碼。

所以python,請求的時候header中content-type需要是這2種。

index.php

<?php
$input = file_get_contents('php://input');
var_dump($input);//form-data 不走這裡
var_dump($_POST);

form_data.py

from requests_toolbelt import MultipartEncoder
import requests
m = MultipartEncoder(fields={'field0': 'value', 'field1': '中文'})
print(m.to_string())
print(m.content_type)
m = MultipartEncoder(fields={'field0': 'value', 'field1': '中文'})
r = requests.post('http://127.0.0.1/index.php', data=m,
                  headers={'Content-Type': m.content_type})

print(r.content)

#返回值
b'--ea08f072980f44e4b9b1bf1c92831c9d\r\nContent-Disposition: form-data; name="field0"\r\n\r\nvalue\r\n--ea08f072980f44e4b9b1bf1c92831c9d\r\nContent-Disposition: form-data; name="field1"\r\n\r\n\xe4\xb8\xad\xe6\x96\x87\r\n--ea08f072980f44e4b9b1bf1c92831c9d--\r\n'

multipart/form-data; boundary=ea08f072980f44e4b9b1bf1c92831c9d

b'string(0) ""\narray(2) {\n  ["field0"]=>\n  string(5) "value"\n  ["field1"]=>\n  string(6) "\xe4\xb8\xad\xe6\x96\x87"\n}\n'

form_urlencoded.py

from socket import *
import urllib3
import urllib
import json
import struct
import time
import threading
import sys
import time

http = urllib3.PoolManager()
url = 'http://127.0.0.1/index.php'
info = {'field0': 'value', 'field1': '中文'}
print(json.dumps(info))
r = http.request('POST', url, body=json.dumps(info), headers={"Content-Type": "application/x-www-form-urlencoded"})

print(r.status)
print(r.data)


#返回值
{"field0": "value", "field1": "\u4e2d\u6587"}
200
b'string(45) "{"field0": "value", "field1": "\\u4e2d\\u6587"}"\narray(1) {\n  ["{"field0":_"value",_"field1":_"\\u4e2d\\u6587"}"]=>\n  string(0) ""\n}\n'

請求資料

通過兩組例子,你可以直觀的看出來請求方式的區別,這裡專門把form-data中的請求資料發出來,因為form-urlencoded就是一個json

--ea08f072980f44e4b9b1bf1c92831c9d
Content-Disposition: form-data; name="field0"

value
--ea08f072980f44e4b9b1bf1c92831c9d
Content-Disposition: form-data; name="field1"

\xe4\xb8\xad\xe6\x96\x87
--ea08f072980f44e4b9b1bf1c92831c9d--

form-data被一串編碼分割,這個分隔叫做boundary,我們在後面列印的m.content_type中可以看出,
multipart/form-data; boundary=ea08f072980f44e4b9b1bf1c92831c9d
Content-Type裡多了boundary就是上面的分隔符。

還有一點不一樣就是對中文的編碼方式。

對於輸出結果

我們發現form-data 沒有走php://input
enctype="multipart/form-data" 的時候 php://input 是無效的。

如果把content-type換成text/html或者application/json我們在$_POST中返回就為空了,但是資料可以再php://input中獲取到。

相關推薦

python POST請求php$_POST接收訊息

首先來到php文件。已經說的很清楚了。 當 HTTP POST 請求的 Content-Type 是 application/x-www-form-urlencoded 或 multipart/form-data 時,會將變數以關聯陣列形式傳入當前指令碼。 所以pytho

php中$_POST接收到參數問題

總結 .org http請求 特殊 不能 長度 描述 tip 並且 問題描述:PHP可以接收_GET、_SERVER、_COOKIE等參數,php://input可以讀取沒有處理過的POST數據,獨獨_POST接收不到post參數。 原因: php://input可以讀

axios 發 post 請求後端接收到引數的詳細解決方案

  問題描述 :axios post 請求或者get請求後接收不到引數 後端接收設定: @RequestParam @RequestBody設定的原因   由於spring的RequestParam註解接收的引數是來自於request

post請求傳json後臺接收

需要將請求頭的設定成:’Content-Type’: ‘application/json;charset=UTF-8;’, 如果傳字串則是:’Content-Type’: ‘application/x

Python # 一個api接口調POST請求

-h curl ont log lib cati values urlencode print ### import urllib2,json url=‘http://xxx.xxx.com.cn/api/v1‘ data=json.dumps({‘organId‘:‘1

ajaxpost請求後臺controller實現前端後臺互動 傳兩個引數 ,後臺controller接收處理

PS→無奈:生氣,就是拿別人的過錯來懲罰自己。原諒別人,就是善待自己。  前臺jsp: $.ajax({ function getPage(page,size) { var postData={ "page":"1",

PHP form表單post提交 $_POST接收到資料

新手,最近在學習PHP,WAMP環境下碰到了同樣的問題,裝完PhpStorm後寫了個表單頁面和一個後臺列印$_POST的測試程式,POST方法接收不到資料,GET和REQUEST可以,另外如果把專案直接放在Apache伺服器的工作目錄下,然後在位址列輸入localhost是可以正常執行的。前面有答主說到了埠

Post請求的方式提交參數並導出excel

我們 false 但是 限制 put 數據 lba bsp 翻轉 一般情況下,我們都是采用get請求的方式導出excel。例如采用如下方式: var exportUrl = ‘/xxx;‘; window.open(exportUrl); 導出excel所需的邏輯參數拼接

python request post請求body中有json數組

發送 方法 錯誤 access token 字符 pre ade 註意 今天被這個卡了好久,最後解決發現是個小問題,哈哈 記錄: 用request發送post請求,原來當body都是普通的字符串和數字時一切順利,今天遇到了body裏面有json數組,結果就是報參數錯誤 解決

CURL實現發送Get和Post請求(PHP)

結果 基本 釋放 初始 常用 header 理解 介紹 今天 1.cURL介紹   cURL 是一個利用URL語法規定來傳輸文件和數據的工具,支持很多協議,如HTTP、FTP、TELNET等。最爽的是,PHP也支持 cURL 庫。本文將介紹 cURL 的一些高級特性,以及

RestTemplate遠程調POST請求:HTTP 415 Unsupported Media Type

return 請求 edi pan lai supported ont mes attr 這是本項目的接口 稱為client @POST @Path("/{urlcode}") @Consumes(MediaTypes.JSON_UTF_8)

node總結之GET/POST請求的傳送和接收了解下

在我們的現實場景中,我們的node伺服器都需要跟使用者的瀏覽器打交道,也就是說建立一個互動的關係。那麼,這個關係之間的通訊基本上比較熟悉的就是get/post這種方式了。咱們這刺激來簡單看下在node中,是如何接收和處理這些關係的。 由於GET請求直接被嵌入在路徑中,URL是完整的請求路徑,

pythonrequests請求報SSL:CERTIFICATE_VERIFY_FAILED錯誤

requests模組之前一直正常的,某一天開始對https的請求都拋錯誤了: requests.exceptions.SSLError: [Errno 1] _ssl.c:504: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:cer

pythonpost請求json資料且返回json資料處理

上篇講到以json形式傳送post請求。 此次為 post請求返回物件對json 時的處理辦法 請求 #請求 response = requests.post(url, data=json.dumps(pyload),headers=headers).text

python傳送post請求上傳檔案無法解析上傳的檔案

前言 近日,在做介面測試時遇到一個奇葩的問題。 使用post請求直接通過介面上傳檔案,無法識別檔案。 遇到的問題 以下是抓包得到的資訊: 以上請求是通過Postman直接傳送請求的。 在這裡可以看到訊息頭裡包含:Access-Token和Content-Type 因此在在使用python直接

post請求query+body傳參

用post請求用query+body傳參 1.url里加上query需要傳的引數(name:majuan) 2.data裡放入body要傳的引數(tel) let tel = 11111 dd.httpRequest({ headers: { 'Con

python---get/post請求下載指定URL返回的網頁內容出現gzip亂碼處理。設定Accept-Encoding為gzip,deflate返回的網頁是亂碼

python—get/post請求下載指定URL返回的網頁內容,出現gzip亂碼處理。設定Accept-Encoding為gzip,deflate,返回的網頁是亂碼 1、指令碼 # --*-- coding:utf-8 --*-- #coding:utf-8

Spring mvc 針對get 和 post 請求引數的不同接收方式

GET 請求 針對與於get請求spring mvc控制層主要接收方式如下 1.直接在controller接收引數,引數名稱要與getURl中傳遞的引數一致 get url : https://localhost:8080/demo/login?&userName=

axios傳送請求post請求請求url後面拼接引數

 像這種情況明明是post請求,但是在請求的url中拼接了引數 其實是在axios.create的時候用了params 1. params會將請求的引數拼接到url中去,用於get請求 2.data是新增到請求體(body)裡面去,用於post請求

pythonrequests請求百度介面報“SSL: CERTIFICATE_VERIFY_FAILED”

SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581) 今天想試用一下百度的語音識別API,附帶步驟: 1. 先去百度開放雲平臺註冊,成為開發者,稽核可能需要時間的,