【问题标题】:How can I post data and get the results from the action page with PHP?如何使用 PHP 从操作页面发布数据并获取结果?
【发布时间】:2011-12-17 22:52:17
【问题描述】:

我有一个名为 ABC 的网页。此网页包含一个只有一个输入“ID”的表单。当您输入您的 ID 并提交时,它会将您的 ID 发送到服务器并在另一个页面上打印您的信息。

我知道表单页面的网址,但不知道结果页面的网址。

我想从我的脚本中向该表单发布一个 ID,并将结果页面放入一个变量中。

到目前为止我尝试过的代码:

function getUrl($url, $method='', $vars=''){

    $ch = curl_init();
    if ($method == 'post') {
        $str = "";
        foreach( $vars as $var => $ele){
            $str .= $var;
            $str .= "=";
            $str .= $ele;
            $str .= "&";
        }
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $str);
    }
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_COOKIEJAR, 'asd.txt');
    curl_setopt($ch, CURLOPT_COOKIEFILE, 'asd.txt');
    curl_setopt($ch, CURLOPT_TIMEOUT, 50000);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 50000);

    $buffer = curl_exec($ch);
    curl_close($ch);
    unset($ch);
    return $buffer;
}

$loginUrl = 'http://app2.sgk.gov.tr/AylikHesap/servlet/';
$loginFields = array('mernisno'=>'xxx');
$remotePageUrl = 'http://app2.sgk.gov.tr/AylikHesap/servlet/com.sgk.aylikhesap.servlet.EventMultiplexer';  

$login = getUrl($loginUrl, 'post', $loginFields);

$remotePage = getUrl($remotePageUrl);

echo $remotePage;

它应该带来结果。 xxx就是我说的ID。

我该怎么做?

【问题讨论】:

  • 如果你有代码你尝试过但失败了,然后发布并询问,这比你如何构建原始问题更有帮助。
  • 我编辑了我的问题。谢谢。
  • 好吧,代码确实在工作。最后我发现了我的错误。现在事实证明,缺少要运行的查询的参数。我真是个傻瓜。

标签: php post curl


【解决方案1】:

您可以为此使用Zend_Http_Client

$client = new Zend_Http_Client();
$client->setUri('http://example.com/login.php');
$client->setParameterPost('ID', 1234);
$response = $client->request('POST');
$result = $response->getBody();

如果您出于任何原因不想使用 Zend Framework,可以使用this function

【讨论】:

  • 这是否需要 Zend 框架才能使用 Zend_Http_Client 类?我可以让它从源代码或其他东西中手动使用吗?
  • 谢谢,但它不适用于我的情况。我想我在某个地方弄错了。您的解决方案返回 200,这很棒,但它没有为我提供结果页面。它只是打印表单页面。
  • 我可以提供有关问题的完整链接和实际信息吗?抱歉,仍在尝试习惯 stackoverflow :) 如果允许,我会很高兴地编辑我的问题。
  • @gzg:是的!允许并鼓励您说明您的实际问题、您使用的代码以及您尝试过的任何其他内容。 (只是不要发布敏感数据,如真实密码。)
【解决方案2】:

CSRF

您可以从站点检索数据,但大多数站点都实现了某种令牌验证,因此换句话说,您不能跨域发布表单数据。

【讨论】:

  • 可能我理解的不够深入,你是说不能通过不同的域将数据发布到表单中?
  • 正确,阅读维基。除非相关网站有公共 API。
  • 但我以前做过。看来这个网页对我有抵抗力。
  • 也许我误解了这个问题,但是您的原始问题已被编辑。 FORM-A = 'mydomain.com' FORM-B = 'yourdomain.com',这些不能交互(或者至少不应该)。但是,如果 SITE-B 允许您通过 API(例如 twitter 或 FB),您可以将数据从 FORM-A 发送到 SITE-B。
猜你喜欢
  • 2014-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-30
  • 1970-01-01
相关资源
最近更新 更多