什么是Java中的PHP CURLOPT_POSTFIELDS

时间:2012-09-22 07:34:48

标签: java http-post

我正在尝试为putlokcer网站编写一个上传者类,他们有API支持。

根据他们的文档,他们提供了一个上传示例,如下所示

// Variables to Post
$local_file = "/path/to/filename.avi"; 
$file_to_upload = array(
    'file'=>'@'.$local_file, 
    'convert'=>'1', //optional Argument
    'user'=>'YOUR_USERNAME', 
    'password'=>'YOUR_PASSWORD', 
    'folder'=>'FOLDER_NAME'   // Optional Argument
); 

// Do Curl Request
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,'http://upload.putlocker.com/uploadapi.php'); 
curl_setopt($ch, CURLOPT_POST,1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $file_to_upload); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec ($ch); 
curl_close ($ch); 

// Do Stuff with Results
echo $result; 

现在我正在尝试使用java.net包转换Java,如下所示,

BufferedInputStream bis = null;         BufferedOutputStream bos = null;         尝试{             URL url = new URL(“http://upload.putlocker.com/uploadapi.php”);             URLConnection uc = url.openConnection();             uc.setDoOutput(真);             uc.setDoInput(真);             uc.setAllowUserInteraction(假);

        bos = new BufferedOutputStream(uc.getOutputStream());
        bis = new BufferedInputStream(new FileInputStream("C:\\Dinesh\\Naruto.jpg"));

        int i;

        bos.write("file".getBytes());

        // read byte by byte until end of stream
        while ((i = bis.read()) != -1) {
            bos.write(i);
        }

        bos.write("user=myusername".getBytes());
        bos.write("password=mypassword".getBytes());
        br = new BufferedReader(new InputStreamReader(uc.getInputStream()));
        String k = "",tmp="";
        while ((tmp = br.readLine()) != null) {
            System.out.println(tmp);
            k += tmp;
        }
    } catch (Exception e) {
        System.out.println(e);
    }

我收到的回复是“没有通过有效的登录或文件”,这意味着我的HTTP POST请求没有发送有效的帖子文件。

任何人都可以解释一下如何使用java.net包来完成这项工作吗?

1 个答案:

答案 0 :(得分:1)

在为表单发布构建请求主体时,您必须遵循特定的格式,当您在PHP中使用curl时,会隐藏许多复杂性。我建议你看看像this question的答案中描述的Apache HTTPComponents客户端,而不是试图推销自己的。

(虽然如果你想手动完成,详情是in this answer