我有一个必须发布到 URL 的 HTML 表单。我希望表单像这样发布一个名为 DATA 的变量:
DATA: somevar=someval&somevar2=someotherval
我在执行此操作时遇到了问题。似乎默认情况下,形成 urlencode 数据,导致:
DATA: somevar%3Dsomeval%26somevar2%3Dsomeotherval
将表单的 enc-type 更改为“text/plain”会导致:
DATA: somevar=someval
SOMEVAR2: someotherval
有什么办法可以让表单实际上只发送上述数据吗?
最佳答案
我不确定您写这篇文章的目的是什么,也不确定防止对 POST 表单进行 URL 编码是否真的能解决您的问题。
但实际上,防止表单的 URL 编码是 100% 可能的,只需添加
enctype="text/plain"
表单的属性。
下面是一个没有 enctype text/plain 的请求示例和另一个带有它的请求。
LMint-PC droope # nc -kl 80 POST / HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:26.0) Gecko/20100101 Firefox/26.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Connection: keep-alive Content-Type: application/x-www-form-urlencoded Content-Length: 168 %7B%22JobTypeIdentifier%22%3A3%2C%22ScheduledStart%22%3Anull%2C%22ScheduleType%22%3A%22Recurring%22%2C%22JobInputP meters%22%3A%5B%5D%2C%22ignoreParam%22%3A%22=%22%7D^C LMint-PC droope # ^C LMint-PC droope # nc -kl 80 POST / HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:26.0) Gecko/20100101 Firefox/26.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Connection: keep-alive Content-Type: text/plain Content-Length: 116 {"JobTypeIdentifier":3,"ScheduledStart":null,"ScheduleType":"Recurring","JobInputParameters":[],"ignoreParam":"="}
关于HTML:防止 POST 表单的 url 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5116219/