我有一个HTML表单,必须发布到URL。我希望表单能够POST一个名为DATA的变量,如下所示:
DATA: somevar=someval&somevar2=someotherval
我在做这件事时遇到了麻烦。默认情况下,表示urlencode数据,导致:
DATA: somevar%3Dsomeval%26somevar2%3Dsomeotherval
将表单的enc-type更改为“text / plain”会导致:
DATA: somevar=someval
SOMEVAR2: someotherval
有没有办法让表格实际上只是发送上面的数据?
答案 0 :(得分:8)
我不确定你对这篇文章的目标是什么,也不确定阻止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":"="}
答案 1 :(得分:0)
答案 2 :(得分:-1)
不,你不能做你想做的事。你可能不应该尝试。 您希望在名为DATA的变量中包含某些数据的事实意味着您的POST有效负载(或您的GET查询字符串)将如下所示
DATA=somevar%3Dsomeval%26somevar2%3Dsomeotherval
如果是(如你所愿),则
DATA=somevar=someval&somevar2=someotherval
这意味着:
DATA的值为'somevar = someval'
somevar2的值为'someotherval'
这是因为每个变量的形式为VARIABLE_NAME = VALUE,它们用'&'分隔。
在您最喜欢的浏览器调试器中自己检查(我使用firebug和chrome内置开发工具)。 所以,问题是:你为什么要这样做?知道帮助你实现目标会更容易。
编辑:示例错误