我想编写一个简单的Web服务(我不是特别关于语言实现),它在nearfreespeech.net上的FreeBSD Web服务器上运行,获取一个指向带有一些附加参数的JPEG图像的URL,如下所示:
http://www.myserver.com/script.cgi?url=http://www.destination.com/image.jpg&width=320
并执行以下操作:
我认为使用像Perl这样的脚本语言并不困难,但我不知道从哪里开始步骤1,2和4。
答案 0 :(得分:1)
您提供的网址无效,但您可以对查询字符串进行编码,例如: http://www.myimageserver.com?url=http%3a%2f%2fwww.flickr.com%2fsomeimage.jpg%2f320%2f200(这里的flickr网址是urlencoded,你可以在网上尝试urlencoding:http://www.opinionatedgeek.com/DotNet/Tools/UrlEncode/Encode.aspx)
使用php,您可以获取网址的参数。要在php中访问“http://www.flickr.com/someimage.jpg/320/200”,您只需使用:
$ url = $ _GET ['url']; //将$ url设置为字符串:“http://www.flickr.com ...”
// ...解析可以在这里完成
获取网址的内容:
$ url_content = file_get_contents($ url);
现在您可以进行处理了。
要返回输出,可以使用echo:
echo $ processed_content;
答案 1 :(得分:1)
我最近一直在研究一个PHP scraper,所以我对其中一些问题已经相当熟悉。
我建议针对这些问题采用以下解决方案:
您可以使用$ _GET或$ _POST轻松获取参数。如果您需要获取URL的其他部分,可以使用parse_url()
虽然file_get_contents()可以使用,但cURL是一个更加复杂和强大的解决方案。
cURL可以返回包含已下载文件的文件句柄,并且可以在此处进行处理。
然后您可以使用fwrite()将文件内容写入本地文件
答案 2 :(得分:0)
这是一个例子,仅适用于jpeg图像。
<?
$url = $_GET['url'];
$im = imagecreatefromjpeg($url);
header("Content-Type: image/jpeg");
for($i=0;$i<100;$i++)
{
for($j=0;$j<100;$j++)
{
if(rand(0,1))
{
$rand = rand(0,4);
imagesetpixel($im,$i,$j,imagecolorallocate($im, 255, 255, 255));
}
}
}
imagejpeg($im);
?>
答案 3 :(得分:0)
我喜欢python这种事情。具体来说,位于WSGI服务器上的Python WSGI应用程序应该适用于您的应用程序。
Python附带一个“简单服务器”,您可以在其上进行测试。对于部署,您可能希望找到第三方WSGI服务器,如CherryPy的WSGI服务器或Rocket(两者都完全在python中实现)。
如果可能的话,我会推荐python 3.2,因为GIL要好得多,这会对我提到的多线程WSGI服务器产生影响 - CherryPy和Rocket。
阅读WSGI以获取更多信息。在Python坐下 e,PEP 333和3333。
答案 4 :(得分:0)
以下是我在Perl中的表现:
#!/usr/bin/perl
use CGI qw(:standard);
use IO::Handle;
use LWP::Simple;
use File::Temp;
use File::Slurp;
$url = param('url');
$width = param('width');
$height = param('height');
$content = get($url);
$in = File::Temp->new( SUFFIX => '.jpg' );
print $in $content;
$out = File::Temp->new( SUFFIX => '.jpg' );
system("convert $in -resize $width" . "x" . "$height $out");
my $q = new CGI;
print $q->header( - type => "image/jpeg", -expires => "-1d" );
$content2 = read_file($out);
print $content2;