php - CURL:发布表单并从 bash 获取数据

标签 php linux bash curl

我正在尝试从 bash 提交表单:

curl -X POST  --data-urlencode "login=123456" --data-urlencode "password=123"
 --data-urlencode "returnUrl=/Katalog/SekceCsv/846?katalog=501" http://xy.com/user/Login

结果:

Object moved to here.

我将表单数据提交到 /user/Login 脚本,成功登录后,脚本将我重定向到“returnUrl”中声明的值。也许这就是curl无法从“returnUrl”获得我想要的响应(它是一个csv文件)的地方。

我在 Google 上发现的内容:我需要使用 -L 启用跟随重定向选项:

curl -X POST  -L --data-urlencode "login=123456" --data-urlencode "password=123"
 --data-urlencode "returnUrl=/Katalog/SekceCsv/846?katalog=501" http://xy.com/user/Login

结果:

Length Required. HTTP Error 411. The request must be chunked or have a content length.

我找不到有关如何解决此问题的更多信息。

我尝试创建一个简单的 html 文件,格式如下:

<html>
<head></head>
<body>
<form method="post" id="LoginForm" action="http://xy.com/user/Login">

          <input type="hidden" value="/Katalog/SekceCsv/846?katalog=501" name="returnUrl" id="returnUrl">
          <input type="text" value="" style="width:150px;" name="login" id="login">
          <input type="password" style="width:150px;" name="heslo" id="heslo">

          <input type="submit">
</form>
</body>

这是有效的,当我按下提交时,我得到了我需要的 csv 文件。

最佳答案

是这样工作的吗?

curl -dL "login=123456&password=123&returnUrl=/Katalog/SekceCsv/846?katalog=501" http://xy.com/user/Login

编辑:

读完你的评论后,我认为你正在尝试一些奇怪的事情。

如果您有一个登录页面和另一个要获取的页面,您应该有 2 个curl 命令。您可以使用 cookie 来跟踪成功登录。

类似于:

curl -X POST -L -b /tmp/c -c /tmp/c -d "login=123456&password=123" http://xy.com/user/Login
curl -X POST -L -b /tmp/c -c /tmp/c -d "returnUrl=/Katalog/SekceCsv/846?katalog=501" http://xy.com/user/

只是一些假设...

关于php - CURL:发布表单并从 bash 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26981489/

相关文章:

javascript - 无法将附加文件传递到 Controller : 422 Unprocessable Entity

javascript - 如何在不重新加载页面的情况下在ajax中成功后更改url

c - 在 insmod 之后不同意符号 symbol_name 的版本

php - 使用 CakePHP,您如何在用户登录时隐藏页面的某些元素?

php - 需要在线自动填充信息到可填写的PDF,能够编辑数据,然后直接保存到服务器

php - 使用/usr/bin/file判断文件类型?

linux - Linux中分页的最大进程数

linux - groupadd 的问题

bash - 如何确保 bash 中换行处理的一致性

linux - 如何 grep 监听端口 80 也可以过滤其他端口包含 80,例如 8080 8088 ...?