使用 curl 将 post 形式的变量发送到具有特殊字符的 Flask 应用程序时出现问题 - 错误 405
Problems using curl to post form variables to a Flask application with special characters- Error 405
我正在尝试编写 PHP 脚本来登录 Flask 网站。它使用 curl 提交登录表单,将登录令牌存储在 cookie 中,然后允许 Web 服务器从安全站点下载信息。但是,似乎存在密码中所需的特殊字符未正确传输的问题。如果我删除特殊字符,调用成功,但它 returns 一个无效的密码错误。如果我包含特殊字符,我会从 Flask 服务器收到 405 错误。我尝试过对密码进行 base64 编码、对其进行 urlencoding、手动将转义字符放入密码字符串中,但都没有成功。是否需要使用特定的机制来确保正确传递密码?任何帮助将不胜感激。我 运行 没主意了。
<?
//username and password of account
$username = "user@website.com";
$password = "n6EsBbz.AARyK7GEV";
//login form action url
$url="https://target-site.com/login/dashboard";
$postinfo = "username=".$username."&password=".$password."&state=&rememberMe=on";
$cookie_file_path = "cookie.txt";
$ch = curl_init();
// extra headers
$headers[] = "Accept: */*";
$headers[] = "Connection: Keep-Alive";
// basic curl options for all requests
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_ENCODING, 'UTF-8');
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
curl_setopt($ch, CURLOPT_USERAGENT,
"Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $_SERVER['REQUEST_URI']);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postinfo);
$result = curl_exec($ch);
echo $result;
curl_close($ch);
?>
您应该删除 CURLOPT_CUSTOMREQUEST
、"POST",这可能会在跟随重定向时导致问题,因为重定向中的响应代码可能会告诉客户端切换到另一个方法来处理后续请求而 CURLOPT_CUSTOMREQUEST
字符串会覆盖它。
我正在尝试编写 PHP 脚本来登录 Flask 网站。它使用 curl 提交登录表单,将登录令牌存储在 cookie 中,然后允许 Web 服务器从安全站点下载信息。但是,似乎存在密码中所需的特殊字符未正确传输的问题。如果我删除特殊字符,调用成功,但它 returns 一个无效的密码错误。如果我包含特殊字符,我会从 Flask 服务器收到 405 错误。我尝试过对密码进行 base64 编码、对其进行 urlencoding、手动将转义字符放入密码字符串中,但都没有成功。是否需要使用特定的机制来确保正确传递密码?任何帮助将不胜感激。我 运行 没主意了。
<?
//username and password of account
$username = "user@website.com";
$password = "n6EsBbz.AARyK7GEV";
//login form action url
$url="https://target-site.com/login/dashboard";
$postinfo = "username=".$username."&password=".$password."&state=&rememberMe=on";
$cookie_file_path = "cookie.txt";
$ch = curl_init();
// extra headers
$headers[] = "Accept: */*";
$headers[] = "Connection: Keep-Alive";
// basic curl options for all requests
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_ENCODING, 'UTF-8');
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
curl_setopt($ch, CURLOPT_USERAGENT,
"Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $_SERVER['REQUEST_URI']);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postinfo);
$result = curl_exec($ch);
echo $result;
curl_close($ch);
?>
您应该删除 CURLOPT_CUSTOMREQUEST
、"POST",这可能会在跟随重定向时导致问题,因为重定向中的响应代码可能会告诉客户端切换到另一个方法来处理后续请求而 CURLOPT_CUSTOMREQUEST
字符串会覆盖它。