带文件附件的 PHP Curl 帖子;自定义内容类型标头

2023-11-22

我必须将文件连同一些发布参数一起发布到服务器。我从该服务器管理员收到的文档显示了发布请求应该是什么样子的示例(*请注意 POST“multipart/x-api-remote-integration”的自定义内容类型):

POST /gateway/remote_send HTTP/1.0

Content-Type: multipart/x-api-remote-integration; boundary=ABC1234

Content-Length: 323

--ABC1234

Content-Type: application/x-www-form-urlencoded

profile_name=username&profile_pw=password1234&attached_type=action_1

--ABC1234

Content-Type: text/csv

Content-Disposition: attachment; filename="attachment.csv"
row1
row2
row3

--ABC1234--

下面是php代码:

<?php
function post(){
    $base_api_url = "https://hostserver.com/gateway/remote_send";

    $filename = realpath("/home/username/tests/test1234qwerty.csv");

    $payload['profile_name'] = "username";
    $payload['profile_pw'] = 'password1234';
    $payload['attached_type'] = 'action_1';
    $payload['filename'] = "@" . $filename . ";type=text/csv;";

    $curl_options = array(
        CURLOPT_URL => $base_api_url,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => http_build_query( $payload ),
        CURLOPT_HTTP_VERSION  => 1.0,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_VERBOSE => true,
        CURLOPT_HEADER => false,
    );

    $curl = curl_init();
    curl_setopt_array( $curl, $curl_options );
    $result = curl_exec( $curl );
    curl_close ($curl);
    echo $result;
  }

post();

从我从服务器收到的信息来看,似乎帖子字段已被正确接收。然而,这是未收到的文件。我不确定我做错了什么。任何意见都将受到高度赞赏。

编辑:附加详细响应:

* About to connect() to hostserver.com port 443 (#0)
*   Trying x.x.x.x... * connected
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* SSL connection using DHE-RSA-AES256-SHA
*   ******** REDACTED ************
*   SSL certificate verify ok.
> POST /gateway/remote_send HTTP/1.0
Host: hostserver.com
Accept: */*
Content-Length: 110
Content-Type: application/x-api-remote-integration

* upload completely sent off: 110out of 110 bytes
< HTTP/1.1 200 OK
< Date: Mon, 19 Aug 2013 16:00:38 GMT
< Server: Apache/2.2.15 (Red Hat)
< Pragma: no-cache
< CacheControl: no-cache
< Cache-Control: no-cache
< Expires: -1
< Connection: close
< Content-Type: multipart/x-api-remote-integration; boundary=remote_send-52124126
<
* Closing connection #0
HTTP/1.1 200 OK
Date: Mon, 19 Aug 2013 16:00:38 GMT
Server: Apache/2.2.15 (Red Hat)
Pragma: no-cache
CacheControl: no-cache
Cache-Control: no-cache
Expires: -1
Connection: close
Content-Type: multipart/x-vcg-remote-api; boundary=remote_send-52124126

--remote_send-52124126
Content-Type: application/x-www-form-urlencoded

result=invalid_filename
--remote_send-52124126--

我知道服务器正在正确读取用户名和密码数据,因为我已经使用错误信息进行了测试并收到了凭据错误。


当您告诉 cURL 上传文件时,Content-Type标题自动设置为multipart/form-data。对于文档中的请求,您必须手动上传文件。

<?php
$url     = 'https://hostserver.com/gateway/remote_send';
$payload = array(
    'profile_name'  => 'username',
    'profile_pw'    => 'password1234',
    'attached_type' => 'action_1'
);
$file = realpath('/home/username/tests/test1234qwerty.csv');

// build multipart
$payload = http_build_query($payload);
$params  = "--ABC1234\r\n"
    . "Content-Type: application/x-www-form-urlencoded\r\n"
    . "\r\n"
    . $payload . "\r\n"
    . "--ABC1234\r\n"
    . "Content-Type: text/csv\r\n"
    . "Content-Disposition: attachment; filename=\"attachment.csv\"\r\n"
    . "\r\n"
    . file_get_contents($file) . "\r\n"
    . "--ABC1234--";

$first_newline      = strpos($params, "\r\n");
$multipart_boundary = substr($params, 2, $first_newline - 2);
$request_headers    = array();
$request_headers[]  = 'Content-Length: ' . strlen($params);
$request_headers[]  = 'Content-Type: multipart/x-api-remote-integration; boundary='
    . $multipart_boundary;

// send the request now

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers);

$reply = curl_exec($ch);

那样有用吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带文件附件的 PHP Curl 帖子;自定义内容类型标头 的相关文章

  • 选择MySql表数据放入数组中

    我尝试从 mysql 捕获数据并将它们全部放入数组中 认为 users table id name code 1 gorge 2132 2 flix ksd02 3 jasmen skaod2 sql mysql query select
  • Laravel 集合 .each() + array_push

    需要有关 Laravel 上 each 方法内的 array push 的帮助 我无法在此代码上获取容器数组 imagesData array collect data images gt each function v k use ima
  • 很好地阻止了齿轮工人

    我有许多 Gearman 工作人员不断运行 保存用户页面浏览记录等内容 偶尔 我会更新 Gearman 工作人员使用的 PHP 代码 为了让工作人员切换到新代码 我杀死并重新启动了工作人员的 PHP 进程 有什么更好的方法来做到这一点 据推
  • PMA 4.5.2.0 file_exists():open_basedir 限制生效

    从 PPA 在我的 Ubuntu 服务器上安装 phpMyAdmin 后 https launchpad net nijel archive ubuntu phpmyadmin https launchpad net nijel archi
  • 智能位置表单字段

    我的用户注册表单上有一个文本字段location 我本质上希望这个字段能够根据 Google 地图 或同等地图 进行验证 只允许有效位置通过 最好采用类似的格式滑铁卢 伦敦 or 伦敦 英国 要求 除了位置名称之外 我还想返回该位置中心的坐
  • PHP上传文件产生错误代码4。为什么?

    HTML
  • 使用 HTTP-Basic 身份验证发出 HTTP GET 请求

    我需要为我正在开发的 Flash Player 项目构建一个代理 我只需要使用 HTTP Basic 身份验证向另一个 URL 发出 HTTP GET 请求 并提供来自 PHP 的响应 就好像 PHP 文件是原始源一样 我怎样才能做到这一点
  • $_POST、$_GET 和 $_REQUEST 之间有什么区别?

    我对这些超级全局变量有点困惑 POST GET and REQUEST 在 PHP 中 在 PHP 中哪些场景需要使用这些变量 这三个变量的主要区别是什么 POST是在使用 application x www form urlencoded
  • 将 PHP mcrypt 与 Rijndael/AES 结合使用

    我正在尝试使用 php 中的 mcrypt 和密码 Rijndael 加密一些文本消息 但我不确定 MCRYPT MODE modename 根据 PHP 手册 这些可用 ecb cbc cfb ofb nofb 或 stream 但我读到
  • Facebook 中用户的时区是如何编码的

    我需要检查用户的时区 但我找不到它的真正定义 参考API http developers facebook com docs reference api user says 用户的时区与 UTC 的偏移量 现在在维基百科上这些是可能的时区
  • 如何读取 XML 文件并从中获取值以在 PHP 编码的 HTML 页面中显示

    我有一个 XML 文件 其中有一些重复的标签 其中包含不同的值 我需要获取这些值并显示在我的网页中 请帮助我得到这个 如果您使用 PHP5 可以查看 SimpleXML 您可以在这里找到介绍教程 http www w3schools com
  • 从数据库 MYSQL 和 Codeigniter 获取信息

    如果你们需要其他信息 上一个问题就在这里 从数据库中获取信息 https stackoverflow com questions 13336744 fetching information from the database 另一个更新 尽
  • 通过ajax执行后期操作时如何克服CORS重定向问题?

    我可以通过外部登录表单中的 post 方法类型提交表单来登录 roundcube 实例 托管在另一台服务器上 我收到此错误 通过 ajax 签名时 XMLHttpRequest 无法加载https 192 168 0 7 mail http
  • Laravel - 覆盖模型 ID

    我正在开发电子书管理系统 我使用 UUID 而不是自动递增整数主键 它工作得很好 protected static function boot parent boot static creating function model model
  • 如何使用 PHP 从 MySQL 检索特定值?

    好吧 我已经厌倦了 过去一周我花了大部分空闲时间试图解决这个问题 我知道 SQL 中的查询已更改 但我无法弄清楚 我能找到的所有其他帖子似乎都已经过时了 如果有人能帮助我 我将非常感激 我想做的就是使用手动输入数据库的唯一 密码 来检索行的
  • 高效插入和更新时检查唯一性

    我的员工表中有 2 列 每列值必须是唯一的 staff code staff name staff id staff code staff name 1 MGT Management 2 IT IT staff 当向表中插入或更新项目时 我
  • 无法与站点通信以检查致命错误

    无法与站点通信以检查致命错误 因此 PHP 更改已恢复 您需要通过其他方式上传 PHP 文件更改 例如使用 SFTP 有什么解决办法 我正在 WordPress 中编辑头文件 遇到这个问题 尝试这个 我有同样的问题并决定调查一下 更改 wp
  • 禁用/启用用户访问/下载,但允许 php 编辑 - 使用 chown 和 chmod

    我想 move uploaded files到某个文件夹 比方说http localhost myproject protected 并且 PHP 应该能够rm mv cp 里面的一切protected 例如 启用 禁用用户对任何文件的访问
  • php56 - CentOS - Remi 仓库

    我刚刚在测试盒上安装了 php 5 6 正常的 cli php 解释器似乎不存在 gt php v bash php command not found gt php56 v PHP 5 6 13 cli built Sep 3 2015
  • 如何移动 Zend_Layout 的“视图”

    通常它会是这样的结构 application modules somemodule views scripts index index phtml 我如何将其移动到 application templates somemodule temp

随机推荐

  • javascript:函数调用自身

    我想下面的代码 jQuery mybutton click function do something 我怎么能回忆起这个 匿名 函数 我无法为此函数命名 var xfun function do something jQuery mybu
  • Delphi SOAP 数组问题

    我有一个用 delphi 创建的 SOAP 应用程序 输入到达服务器正确 但输出始终为空 r创建了对象 响应 但是length r notes 始终为 0 如果我在没有数组的情况下执行应用程序 它也可以正常工作 哪里有问题 三天的谷歌搜索和
  • 使用Jquery从Json对象获取父节点

    我试图通过子节点获取 json 对象中的父节点 我从客户端获得的 json 是一个多级目录层次结构 层次结构就像 Root Folder 1 folder1 a folder1 b folder 2 folder 3 folder3 a 我
  • PHP-通过 URL 获取文件类型

    我想使用 PHP 通过 URL 获取文件类型 例如 image gif 我尝试过 上面的代码给了我一个空白页 下面的代码返回 3 我哪里错了 已解决 使用 Fileinfo 获取内容类型
  • SQL Server - Guid VS。长的

    到目前为止 我一直在使用 C Guid Guid NewGuid 方法生成一个唯一的 ID 该 ID 可以使用 Linq to SQL 作为 ID 字段存储在我的一些 SQL Server 数据库表中 我被告知 出于索引原因 使用 GUID
  • 在SQLite UPDATE中模拟ORDER BY来处理唯一性约束

    我在 SQLite 3 中有一个表 sqlite gt schema CREATE TABLE table1 id INTEGER PRIMARY KEY NOT NULL title TEXT UNIQUE NOT NULL priori
  • 解决ReferenceError:Next.js中未定义localStorage [重复]

    这个问题在这里已经有答案了 我构建了一个 React 现在我尝试从 React Router dom 迁移到 Next js 我进行了重大更改并重构了代码 pages routes 和 store js 但后来我收到此错误 Referenc
  • 为什么在数据库设计中使用一对一关系?

    我很难弄清楚何时在数据库设计中使用一对一关系或者是否有必要 如果您只能选择查询中所需的列 是否有必要将表分解为一对一的关系 我想更新一个大表比更新一个小表对性能有更大的影响 我确信这取决于表用于某些操作 读 写 的程度 那么 在设计数据库模
  • Ninject 支持 Func(自动生成工厂)吗?

    Autofac 自动生成工厂Func
  • 什么是单一定义规则?

    C 中的单一定义规则到底说了什么 我能找到的唯一值得信赖的事件是C 编程语言 第三 编辑 第 9 2 3 页 除此之外 该规则还有其他官方定义吗 真相就在标准中 3 2 一个定义规则 任何翻译单元均不得包含更多内容 比任何变量的一个定义 函
  • 带有 dnx 项目的 EF 6

    我有一个新的 ASP net 5 dnx 类库 用于实体框架 我需要以 EF 6 为目标 因为我需要的某些功能在 EF 7 中没有 首先 EF 工具 如启用迁移 不存在 我添加了一个旧式类库并安装了 EF 6 现在命令就在那里 当我运行启用
  • 我无法从 Erlang shell 中输入一行得到结果

    I typed erl启动 erlang shell Eshell V5 7 4 外壳启动 但是 如果我在 shell 中输入一些表达式 例如 20 30 并按 Enter 键 我会回到 1 gt 并且不会显示表达式的结果 什么可能导致这个
  • FFT 高斯模糊

    我正在尝试使用 FFT 来实现高斯模糊 并且可以在这里找到以下方法 这意味着您可以采取 图像的傅里叶变换和 过滤 乘以 复数 结果 然后取逆 傅里叶变换 我有一个内核 K 一个 7x7 矩阵 和一个图像输入 一个 512x512 矩阵 我不
  • 如何在 MATLAB 中将日期转换为数字并再转换回来

    我有日期 2010年1月11日 并使用该功能 日期 年 A1 月 A1 日 A1 使用 Excel 将日期转换为数字 40189 我可以使用 MATLAB 将数字 40189 再次转换回日期吗 Use DATESTR gt gt dates
  • 此 iPhone 6 运行的是 iOS 12.4.1 (16G102),该版本的 Xcode 可能不支持

    收到错误 这款 iPhone 6 运行的是 iOS 12 4 1 16G102 可能不是 此版本的 Xcode 支持 更新 iPhone 后尝试在 iPhone 上运行该应用程序时 我知道我可以更新 Xcode 和系统 问题就会得到解决 但
  • Jasper 报告缺少第一行

    我正在使用生成报告贾斯珀报告并假设将其导出为多种格式 但目前我只使用 Excel 报告 这是我的控制器代码 InputStream in reportTemplate getTemplate reportInquery getTemplat
  • Android 从视频中去除音频

    在我的程序中 它获取 MP4 视频 我希望它输出 MP3 没有任何服务器端内容 由于 Android 和我的应用程序 需要在许多不同的硬件配置上运行 这意味着我可能无法使用 FFMPEG 我知道这可能非常消耗电池和处理能力 尤其是对于手机而
  • PHP XSS 问题/澄清

    之前已经有人问过这个问题 但我需要 100 清楚地了解这个问题 因为正确解决这个问题对我来说非常重要 情况 网站上的消息系统 用户在文本框中输入消息 提交表单并将其输入数据库 然后可以从数据库中调用该数据并在其中显示 span 标签到另一个
  • 如何使用 Zend Framework 2 使用 Rest API

    有人可以提供一个在 Zend Framework 2 中使用第三方 Rest API 例如 someurl 的示例吗 在 ZF1 中使用 Zend Rest 非常简单 我不想在我的应用程序中创建其余 api 只是使用第三方 API Than
  • 带文件附件的 PHP Curl 帖子;自定义内容类型标头

    我必须将文件连同一些发布参数一起发布到服务器 我从该服务器管理员收到的文档显示了发布请求应该是什么样子的示例 请注意 POST multipart x api remote integration 的自定义内容类型 POST gateway