我正在将数据发布到外部API(使用PHP,如果它是相关的).
我应该对我传递的POST变量进行URL编码吗?
或者我只需要对GET数据进行URL编码?
谢谢!
更新:这是我的PHP,如果它是相关的:
$fields = array(
'mediaupload'=>$file_field,
'username'=>urlencode($_POST["username"]),
'password'=>urlencode($_POST["password"]),
'latitude'=>urlencode($_POST["latitude"]),
'longitude'=>urlencode($_POST["longitude"]),
'datetime'=>urlencode($_POST["datetime"]),
'category'=>urlencode($_POST["category"]),
'metacategory'=>urlencode($_POST["metacategory"]),
'caption'=>($_POST["description"])
);
$fields_string = http_build_query($fields);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
Run Code Online (Sandbox Code Playgroud) 我有一个分类广告网站,在显示广告的页面上,我正在创建一个"向朋友发送提示"表单...
所以任何想要的人都可以将广告提示发送给一些朋友的电子邮件地址.
我猜表单必须提交到php页面吗?
<form name='tip' method='post' action='tip.php'>
Tip somebody: <input name="tip_email" type="text" size="30" onfocus="tip_div(1);" onblur="tip_div(2);"/>
<input type="submit" value="Skicka Tips"/>
<input type="hidden" name="ad_id" />
</form>
Run Code Online (Sandbox Code Playgroud)
提交表单时,页面会重新加载......我不希望这样......
有没有办法让它不重新加载仍然发送邮件?最好没有ajax或jquery ......
谢谢
我的代码:
fetch("api/xxx", {
body: new FormData(document.getElementById("form")),
headers: {
"Content-Type": "application/x-www-form-urlencoded",
// "Content-Type": "multipart/form-data",
},
method: "post",
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用fetch api发布我的表单,它发送的正文如下:
-----------------------------114782935826962
Content-Disposition: form-data; name="email"
test@example.com
-----------------------------114782935826962
Content-Disposition: form-data; name="password"
pw
-----------------------------114782935826962--
Run Code Online (Sandbox Code Playgroud)
(我不知道为什么每次发送边界的数字都会改变...)
我希望用"Content-Type"发送数据:"application/x-www-form-urlencoded",我该怎么办?或者,如果我只需处理它,我如何解码控制器中的数据?
谁回答我的问题,我知道我可以做到:
fetch("api/xxx", {
body: "email=test@example.com&password=pw",
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
method: "post",
}
Run Code Online (Sandbox Code Playgroud)
我想要的是像$("#form").jQuery中的serialize()(没有使用jQuery)或者在控制器中解码mulitpart/form-data的方法.谢谢你的回答.
提出错误的问题,请参阅下面的更新
我需要将我的AngularJS项目与现有的RESTful API集成.这些API使用POST请求upload a file,并在请求中提交表单数据.不幸的是,其中一个表单输入需要进入Content-Type: Application/json.
在网络上搜索后,我只能POST跟Content-Type: multipart/form-data其中每个部分不具有特定的MIME.如何 在Javascript中为每个部分组合我multipart/form-data的不同MIME?
POST /api/v1/inventory
Host: localhost:8000
Origin: http://localhost:9000
Content-Type: multipart/form-data; boundary=------border
------border
Content-Disposition: form-data; name="owner"
john doe
------border
Content-Disposition: form-data; name="image"; filename="mybook.png"
Content-Type: image/png
------border
Content-Disposition: form-data; name="items"
Content-Type: application/json
{"name": "Book", "quantity": "12"}
------border--
Run Code Online (Sandbox Code Playgroud)
相关参考文献:
为提出错误的问题而道歉.最初的问题是,我可以看到服务器调用逻辑的东西,
func POST(req):
owner = req.owner // This is string
image = req.image …Run Code Online (Sandbox Code Playgroud) 我的理解是,request.args在Flask中包含来自GET请求的URL编码参数,同时request.form包含POST数据.我很难掌握的是为什么在发送POST请求时,尝试访问数据时request.form返回400错误但是当我尝试使用它时request.args它似乎工作正常.
我试图发送具有两个请求Postman和curl,结果是相同的.
curl -X POST -d {"name":"Joe"} http://127.0.0.1:8080/testpoint --header "Content-Type:application/json"
Run Code Online (Sandbox Code Playgroud)
码:
@app.route('/testpoint', methods = ['POST'])
def testpoint():
name = request.args.get('name', '')
return jsonify(name = name)
Run Code Online (Sandbox Code Playgroud) 由于Django 1.5原始帖子数据可以通过request.body访问.
在我的应用程序中,我有时会通过表单和有时原始数据(例如json)发送数据.有没有办法写这样一个不会失败的函数?
def get_post_var(request, name):
result = request.POST.get(name)
if result:
return result
post_body = dict(urlparse.parse_qsl(request.body))
result = post_body.get(name)
if result:
return result
return None
Run Code Online (Sandbox Code Playgroud) 有没有办法能够从ASP.NET MVC Web API中的多部分表单数据请求中获取模型绑定(或其他)?
我看到各种博客帖子,但是在帖子和实际版本之间发生了变化,或者它们没有显示模型绑定工作.
这是一篇过时的帖子:发送HTML表单数据
这是这样的:使用ASP.NET Web API进行异步文件上载
我发现这个代码(并修改了一下)在某处手动读取值:
模型:
public class TestModel
{
[Required]
public byte[] Stream { get; set; }
[Required]
public string MimeType { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
控制器:
public HttpResponseMessage Post()
{
if (!Request.Content.IsMimeMultipartContent("form-data"))
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
IEnumerable<HttpContent> parts = Request.Content.ReadAsMultipartAsync().Result.Contents;
string mimeType;
if (!parts.TryGetFormFieldValue("mimeType", out mimeType))
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
var media = parts.ToArray()[1].ReadAsByteArrayAsync().Result;
// create the model here
var model = new TestModel()
{
MimeType = mimeType, …Run Code Online (Sandbox Code Playgroud) 我需要通过POST方法发送数据.
例如,我有字符串"bla&bla&bla".我尝试使用encodeURI并得到"bla&bla&bla"作为结果.对于这个例子,我需要用正确的东西替换"&".
我应该用什么样的方法来准备正确的POST数据?
更新:
我只需要转换可能破坏POST请求的charachters.只有他们.
我理解 GET 请求需要将它们输入到 URL 中,因此需要对 URL(百分比)进行编码,以便它们在解释 URL 的服务器的上下文中没有任何意义。
但是如果数据在请求正文中而不是 URL 中,那么为什么需要对它进行 URL 编码?
例子: