使用Indy10的Curl exec

使用Indy10的Curl exec,curl,delphi-2010,indy10,Curl,Delphi 2010,Indy10,我想使用Delphi2010和Indy10(IdHttp组件)执行下一个curl请求(php),但我不确定是否可以完成。我可以使用IdHttp组件执行GET、PUT和POST(CRUD),但在这种情况下,我不知道如何实现它。我对如何用Delphi模拟curl命令不感兴趣,但对如何实现这个特定的帖子来上传文件感兴趣 $url = 'http://example.com'; $key = 'YOUR_GENERATED_API_ACCESS_KEY'; $psProduct

我想使用Delphi2010和Indy10(IdHttp组件)执行下一个curl请求(php),但我不确定是否可以完成。我可以使用IdHttp组件执行GET、PUT和POST(CRUD),但在这种情况下,我不知道如何实现它。我对如何用Delphi模拟curl命令不感兴趣,但对如何实现这个特定的帖子来上传文件感兴趣

   $url = 'http://example.com';
    $key  = 'YOUR_GENERATED_API_ACCESS_KEY';

    $psProductId = 19;
    $urlImage = $url.'/api/images/products/'.$psProductId.'/';

    //Here you set the path to the image you need to upload
    $image_path = '/path/to/the/image.jpg';
    $image_mime = 'image/jpg';

    $args['image'] = new CurlFile($image_path, $image_mime);

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLINFO_HEADER_OUT, 1);
    curl_setopt($ch, CURLOPT_URL, $urlImage);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_USERPWD, $key.':');
    curl_setopt($ch, CURLOPT_POSTFIELDS, $args);
    $result = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if (200 == $httpCode) {
        echo 'Product image was successfully created.';
    }

使用HTTP上载文件通常有两种方法:

  • 以文件数据作为HTTP正文的
    PUT
    请求

  • 一种
    POST
    请求,使用
    multipart/form data
    媒体类型,其中HTTP正文是一系列MIME部分,文件数据在一部分中,通常在其他部分中有附加字段来描述文件,或提供额外输入


要使用Indy发送
multipart/form data
encoded
POST
请求,需要使用重载版本的
TIdHTTP.POST()
方法,该方法将
TIdMultipartFormDataStream
对象作为输入。然后,您可以根据需要将您的文件(和其他字段)添加到
TIdMultipartFormDataStream

这让我找到了正确的方法。我已经用TIdMultiPartFormDataStream和AddFile('image',)完成了。非常感谢。