如何使API POST调用请求重定向与HTML POST请求完全相同

时间:2018-09-24 12:36:48

标签: php html laravel curl

下面是我使用curl的代码,它并没有像HTML表单那样真正重定向:

import string
def func(strg):
    return ''.join(c for c in strg if c in string.printable[:-5])

大家好,
上面是我使用 php package : curl/curl编写的示例代码,
但请放心,我期待任何答案,使用纯curl的答案也可以,并且只要使用php语言,其他答案也可以。

我要实现的目标是如何进行API调用,就像HTML表单一样。为什么我要实现这一目标?因为在HTML表单中,我们需要单击“提交”按钮,所以我知道javascript可以触发,但我正在尝试使用完全后端的语言来构建自己的包。

我已经尝试过在互联网上搜索问题,但是没有一个是我所期望的。

下面是我的简单html表单,它确实重定向到所需的url:

import pandas as pd 
df = pd.read_csv(fileName)
df['description'] = df['description'].apply(func)

上面是可工作的HTML表单示例,它被重定向到该操作的URL路径,但是在curl中,我无法实现它,因此,如何使用curl或任何其他方式来实现它。

2 个答案:

答案 0 :(得分:0)

设置Content-Type头并不表示curl将使用哪种格式发送帖子数据。如果给CURLOPT_POSTFIELDS一个数组,则curl将使用multipart/form-data格式发送数据,无论您在Content-Type标头中放置什么内容。您的卷曲代码很可能以Multipart / form-data格式发送数据,而$ params是一个数组,并且由于您告诉服务器this is application/x-www-form-urlencoded,因此服务器绑定将multipart / form-data数据解析为{{ 1}},  (这是一种完全不兼容的格式),并且根本无法理解数据。如果要将邮政数据数组转换为application/x-www-form-urlencoded格式,请使用application/x-www-form-urlencoded函数,例如

http_build_query

答案 1 :(得分:0)

我找到了使用curl进行POST重定向的答案:

$params = ['payee_id' => 1 , 'amount' => 300];

$curl = curl_init('http://someurl.com/silent/pay');
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($params));    
        curl_exec($curl);

如果需要更多说明,curl将遵循POST方法的重定向,请转到here