2

pecl_http 中的 http_post_fields 是否有类似的功能?我当前的主机只安装来自http://pear.php.net/的扩展(不知道为什么,但我没有 ssh 访问权限,而是一个 web gui,并且只能安装可用的扩展。从那里)

这是我的代码

<?php
    $files = array(
        array(
            'name' => 'torrent',            // Don't change
            'type' => 'application/x-bittorrent',
            'file' => '0-273-70244-0.pdf.torrent'           // Full path for file to upload
        )
    );

    $http_resp = http_post_fields( 'http://torcache.net/autoupload.php', array(), $files );
    $tmp = explode( "\r\n", $http_resp );
    $infoHash = substr( $tmp[count( $tmp ) - 1], 0, 40 );
    var_dump($infoHash);
    unset( $tmp, $http_resp, $files );

目前这不起作用,因为我正在为 http_post_fields 获取未定义的函数

4

2 回答 2

4

有很多方法可以从 PHP 发布数据,这里有一些方法可以帮助您入门:

使用流上下文打开(使用fopen)带有您要发送的发布数据的 URL

function do_post($url, $data)
{
  $params = array('http' => array(
              'method' => 'POST',
              'content' => $data
            ));

  $ctx = stream_context_create($params);
  $fp = @fopen($url, 'rb', false, $ctx);
  if (!$fp) {
    throw new Exception("Problem with $url, $php_errormsg");
  }
  $response = @stream_get_contents($fp);
  if ($response === false) {
    throw new Exception("Problem reading data from $url, $php_errormsg");
  }
  return $response;
}

改编自Wez Furlong的代码示例。

卷曲

要使用CURL,PHP 扩展需要可用,这比现在更常见,但取决于您的主机。

function do_post($url, $data)
{
  $ch = curl_init($url);

  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

  $response = curl_exec($ch);
  curl_close($ch);
  return $response;
}

改编自Lorna Jane的代码示例。

于 2012-06-15T05:50:25.830 回答
2

要将种子上传到 torcache,我只需使用:

<?php
$upload_result = curl_upload('http://torcache.net/autoupload.php','torrent','/absoulte_full_path_to_torrent/torrent.torrent');

function curl_upload($url,$fileFormAttribute,$file){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_VERBOSE, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible;)");
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, true);
        $post = array($fileFormAttribute=>"@".$file);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
        $response = curl_exec($ch);
        return $response;
}
?>

$upload_result如果成功将包含 torrent 哈希,如果它不是 torrent 的绝对路径,它将失败。

于 2012-06-15T06:31:19.707 回答