我原本以为我会用curl来做这个,但看起来我错了。我需要做的是捕获一篇文章,并进行一些数据库查找以进行验证,然后将验证的数据发布到远程URL。做服务器端验证然后发布到远程脚本
我已经通过填充html表单并使用javascript提交它,但这有明显的缺陷。我想构建一个帖子并发送浏览器,就好像他们发布了一个表单到远程url。
我在卷曲文件中丢失了什么?什么是好的™这样做的方法?
我原本以为我会用curl来做这个,但看起来我错了。我需要做的是捕获一篇文章,并进行一些数据库查找以进行验证,然后将验证的数据发布到远程URL。做服务器端验证然后发布到远程脚本
我已经通过填充html表单并使用javascript提交它,但这有明显的缺陷。我想构建一个帖子并发送浏览器,就好像他们发布了一个表单到远程url。
我在卷曲文件中丢失了什么?什么是好的™这样做的方法?
您可以使用卷曲来做到这一点。
但是,您可能还有其他问题需要思考。当浏览器物理地发布到另一个url时,Cookie,会话等被设置。从服务器发布时,这些可能不会被设置。您还应该查看SO上的屏幕抓取问题以了解更多信息。
假设情况并非如此,您应该能够获得帖子,验证字段并使用curl重新发布。有manymanyexamples的doing this。
编辑
我验证字段server.php
也就是说,如果你能依靠的JavaScript ...
这是一个很好的方法,不需要任何服务器端资源。 – 2009-10-08 20:22:41
只要您不关心用户是否知道最终URL是什么,就可以接受这种做法,让他们有机会将想要的任何数据发布到最终目的地。 – 2009-10-08 20:24:31
@Matt Huggins:非常真实。如果你想避免这种情况,你当然可以有相同的Ajax请求返回/设置最终目的地。 – jeroen 2009-10-08 20:30:33
只要有请求/响应是这样的:
+---------+ request +--------+ curl request +--------+
| | -----------> | | ---------------> | |
| browser | | url #1 | | url #2 |
| | <----------- | | <--------------- | |
+---------+ response +--------+ curl response +--------+
坐在浏览器背后的用户将无法受益知道最终的URL(上面的url#2)是什么,因为它不在HTML源代码中,所以它们不会破解并且手动跳过中间人URL(url#1)。
我发现发出“wget”比CURL更容易管理。
$remoteContent = `wget -o - http://someremoteurl`;
除此之外,马特的回答是正确的。但是,如果您从屏幕截图的远程站点获得的响应中包含链接,则必须搜索并替换它们(如果您想自己处理它们) - 那么您将创建代理服务器。 ...
-CF
感谢您的回应,特别是编辑!大卫沃尔什的例子是我所需要的。我在curl_setopt选项中迷路了。 – jerrygarciuh 2009-10-08 20:43:15