我正在将一些Perl代码转换为PHP。
但是,我对Perl不太了解,因此我必须用粗略的含义编写代码。
而且,我不明白下面的Perl代码是什么意思...
$req2->content(<<"POST_DATA")
和--$boundary
的含义是什么?
我已经搜索了Perl documentation,但是很难找到。
PHP代码:
...
$boundary= 'Nobody-has-the-intention-to-erect-a-wall';
$req2 = curl_init($search_url);
curl_setopt($req2, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($req2, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($req2, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($req2, CURLOPT_RETURNTRANSFER, true);
curl_setopt($req2, CURLOPT_COOKIE, $cookie);
curl_setopt($req2, CURLOPT_HTTPHEADER, array(
'Content-Type: multipart/form-data;boundary='.$boundary,
'Content-Length: ' . strlen($data_string))
);
$result= curl_exec($req2);
...
Perl代码:
...
my $boundary= 'Nobody-has-the-intention-to-erect-a-wall';
$req2->content_type('multipart/form-data;boundary='.$boundary);
$req2->header("Cookie"=>"access_token_cookie=$access_token_cookie; csrf_access_token=$csrf_access_token");
$req2->content(<<"POST_DATA"); #what means this?
--$boundary
Content-Disposition: form-data; name="num_result"
Content-Type: text/plain
$num_result
--$boundary
Content-Disposition: form-data; name="img"; filename="search.jpg"
Content-Type: image/jpeg
$image
--$boundary--
POST_DATA
my $res = $ua->request($req2);
...
答案 0 :(得分:4)
$req2->content(<<"POST_DATA"); #what means this?
<<"POST_DATA"
开始一个HERE document,它实际上是一个长字符串。双引号""
告诉Perl做string interpolation。这意味着字符串中的变量将被其内容替换。当解析器遇到定界符时,该字符串结束,在这种情况下为字符串POST_DATA
。
您所指的--
不是运算符。在字符串内部使用。该程序通过HTTP发送multipart/formdata
表单。如果您对技术细节感兴趣,请查看RFC 7578。本质上,请求正文的每个部分代表一个文档。它可以是多行,并且包含很多信息。边界可以在HTTP标头中设置,通常是一个长而随机的字符串,不会出现在任何正文部分中。有关详细说明,请参见this answer。
答案 1 :(得分:3)
与PHP实际上没什么不同。
<<
Heredoc,也出现在PHP中,只是略有不同:
echo (<<<"POST_DATA"
First line
Second line
POST_DATA
);
--
变量减少,如<?php $a=2; echo --$a;
注意:
当然,在Heredoc --
中只是文本。
建议:
如果您不完全了解Perl,请尝试运行它(这不是邪恶的代码)。
my $boundary = 'Nobody-has-the-intention-to-erect-a-wall';
print(<<"POST_DATA");
--$boundary
Content-Disposition: form-data; name="num_result"
Content-Type: text/plain
$num_result
--$boundary
Content-Disposition: form-data; name="img"; filename="search.jpg"
Content-Type: image/jpeg
$image
--$boundary--
POST_DATA
将产生产量:
--Nobody-has-the-intention-to-erect-a-wall
Content-Disposition: form-data; name="num_result"
Content-Type: text/plain
--Nobody-has-the-intention-to-erect-a-wall
Content-Disposition: form-data; name="img"; filename="search.jpg"
Content-Type: image/jpeg
--Nobody-has-the-intention-to-erect-a-wall--