当前位置: 首页 > 知识库问答 >
问题:

guzzle,如何强制在多部分/表单数据中输入内容类型

归星驰
2023-03-14

我是Guzzle的新手,我正试图提出一个Rest请求来签署PDF文件。供应商表示:

  • 您需要使用基本身份验证

系统返回一个包含签名PDF文件的响应,类型为application/octet stream

这是我用古斯测试的代码,但提供商说在应用程序/pdf中发送的mime类型。如何“强制”PDF文件的mimetype?

$client = new Client([
    'auth' => ['login', 'password'],
    'debug' => true,
    'curl'  => [
                  CURLOPT_PROXY => '192.168.1.232',
                  CURLOPT_PROXYPORT => '8080',
                  CURLOPT_PROXYUSERPWD => 'username:password',
             ],
]);
$boundary = 'my_custom_boundary';
$multipart = [
            [
                'name'     => 'data',
                'contents' => "{'nomDocument':'documentTest.pdf','externalid':'123456'}",
                'Content-Type'  => 'application/json'
            ],
            [
                'name'     => 'file',
                'contents' => fopen('documentTest.pdf', 'r'),
                'Content-Type'  => 'application/octet-stream'
            ],
        ];

$params = [
    'headers' => [
        'Connection' => 'close',
        'Content-Type' => 'multipart/form-data; boundary='.$boundary,
    ],
    'body' => new GuzzleHttp\Psr7\MultipartStream($multipart, $boundary),
];

try{
    $response = $client->request('POST', 'https://server.com/api/sendDocument', $params);
} catch (RequestException $e) {
    echo Psr7\str($e->getRequest());
    if ($e->hasResponse()) {
        echo Psr7\str($e->getResponse());
    }
}

谢谢你的帮助。

共有1个答案

上官淮晨
2023-03-14

您必须在标头中传递Content-Type

$multipart = [
        [
            'name'     => 'data',
            'contents' => "{'nomDocument':'documentTest.pdf','externalid':'123456'}",
            'headers'  => [ 'Content-Type' => 'application/json']
        ],
        [
            'name'     => 'file',
            'contents' => fopen('documentTest.pdf', 'r'),
            'headers'  => [ 'Content-Type' => 'application/octet-stream']
        ],
    ];

在Guzzle文档中,您可以为每个多部分数据指定标题。如果您没有设置标题,请根据文件为您设置内容类型。

 类似资料:
  • 问题内容: 我有一个带有方法的控制器方法,该方法接收multipart / form-data: 我想使用进行测试。不幸的是创建了一个具有方法的实例: 编辑: 当然,我 不能 创建自己的实现,例如 因为具有包本地构造函数。 但是我想知道是否还有其他更方便的 方法?可以这样做吗,可能是我错过了一些现有的类或方法吗? 问题答案: 是的,有一种方法,而且也很简单! 我自己也遇到了同样的问题。尽管我不满意

  • 问题内容: 我试图发送某种形式而不重新加载页面,并且试图理解幕后细节,因此不使用任何JavaScript库: 调用了upload_file(),但如果我做对了,则不会发送数据。请提供有关发送数据的正确方式的建议。 问题答案: 通过表单传递属性 如果您想获得回覆,可以使用这个 您可以通过或检索所有数据 更新有点晚 至于有关上传的@Varun问题,此代码无法直接处理文件上传,要使用此代码发送文件,您需

  • 我们目前正在Android中使用okhttp3和Reformation2来使用多部分/表单数据进行POST类型的网络api调用,api请求和响应如下所示 如果您观察到,请求标题Content-Type具有 下面是代码 我在发送定制的请求头内容类型时遇到了一个问题,它是“”基本上我需要更新内容类型头以适应“”为此我尝试了以下代码 这导致添加""到Content-Type,但这导致删除或不添加现有属性

  • 我已经创建了一个使用“多部分/表单数据”的控制器 采样器请求对象 现在,我将尝试使用模拟MVC测试它,但我不知道如何将“多部分/表单数据”作为内容传递。我看到很多使用JSON的示例,但没有使用多部分/表单数据 有没有一种方法可以完成我的请求与多部分/form_data?理想情况下,它需要在MockHttpServletRequest的主体中

  • 我想问一些问题,最近我不得不将我们的遗留应用程序迁移到weblogic,但有些功能不能使用(多部分post form),下面是我的代码: noticewrite.jsp: noticeProc.jsp 问题是,当我单击提交按钮时,文件存储到服务器,但文本字段和文本区域值没有存储到数据库,并引发错误: 我需要你的建议,这有什么问题?因为它在tomcat上工作得很好,但不能在weblogic下运行,谢

  • 我需要实现一个RESTendpoint,它接收我使用的多部分/表单数据: Spring防尘套 科特林 SpringMVC 提交包含以下部分的多部分表单: 部署名称------文本/普通 启用重复筛选------文本/普通 仅更改部署------文本/普通 部署源------文本/普通 租户id------文本/普通 *----应用程序/八位字节流 Rest控制器看起来是这样的: 对于所有有效的参数