2009-10-08 75 views
1

我原本以为我会用curl来做这个,但看起来我错了。我需要做的是捕获一篇文章,并进行一些数据库查找以进行验证,然后将验证的数据发布到远程URL。做服务器端验证然后发布到远程脚本

我已经通过填充html表单并使用javascript提交它,但这有明显的缺陷。我想构建一个帖子并发送浏览器,就好像他们发布了一个表单到远程url。

我在卷曲文件中丢失了什么?什么是好的™这样做的方法?

回答

2

您可以使用卷曲来做到这一点。

但是,您可能还有其他问题需要思考。当浏览器物理地发布到另一个url时,Cookie,会话等被设置。从服务器发布时,这些可能不会被设置。您还应该查看SO上的屏幕抓取问题以了解更多信息。

假设情况并非如此,您应该能够获得帖子,验证字段并使用curl重新发布。有manymanyexamplesdoing this

编辑

  • 后形式的server.php
  • 过程/使用卷曲remote.service
+0

感谢您的回应,特别是编辑!大卫沃尔什的例子是我所需要的。我在curl_setopt选项中迷路了。 – jerrygarciuh 2009-10-08 20:43:15

2

我验证字段server.php

  • 后验证参数没有尝试过,但我会做的是将表单提交给它的最终目的地并添加一个javascript onSubmit()函数,它向服务器发送ajax请求并返回true或false。

    也就是说,如果你能依靠的JavaScript ...

  • +0

    这是一个很好的方法,不需要任何服务器端资源。 – 2009-10-08 20:22:41

    +0

    只要您不关心用户是否知道最终URL是什么,就可以接受这种做法,让他们有机会将想要的任何数据发布到最终目的地。 – 2009-10-08 20:24:31

    +0

    @Matt Huggins:非常真实。如果你想避免这种情况,你当然可以有相同的Ajax请求返回/设置最终目的地。 – jeroen 2009-10-08 20:30:33

    2

    只要有请求/响应是这样的:

    +---------+ request +--------+ curl request +--------+ 
    |   | -----------> |  | ---------------> |  | 
    | browser |    | url #1 |     | url #2 | 
    |   | <----------- |  | <--------------- |  | 
    +---------+ response +--------+ curl response +--------+ 
    

    坐在浏览器背后的用户将无法受益知道最终的URL(上面的url#2)是什么,因为它不在HTML源代码中,所以它们不会破解并且手动跳过中间人URL(url#1)。

    1

    我发现发出“wget”比CURL更容易管理。

    $remoteContent = `wget -o - http://someremoteurl`; 
    

    除此之外,马特的回答是正确的。但是,如果您从屏幕截图的远程站点获得的响应中包含链接,则必须搜索并替换它们(如果您想自己处理它们) - 那么您将创建代理服务器。 ...

    -CF