AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 79094579
Accepted
John Beasley
John Beasley
Asked: 2024-10-16 22:40:57 +0800 CST2024-10-16 22:40:57 +0800 CST 2024-10-16 22:40:57 +0800 CST

在端点接收无效凭证

  • 772

我正在 Postman 中研究 Webhook API。

在 Postman 中,我在 Headers 中输入了用户名、密码和帐户代码。然后我将以下有效负载直接发送到网站的端点:

{
  "email": "[email protected]",
  "overwrite": true,
  "fields": {
    "first_name": "John",
    "last_name": "Doe",
    "country": "Chile",
    "mrc_c3": "300.00",
    "mrc_date_c3": "10/16/24"
  }
}    

使用上述方法,我得到了 200 OK 响应。

我可以登录网站并查看更新。

当我尝试将相同的有效负载发送到 PHP 脚本端点时出现了问题。

在 PHP 端点内,我能够提取与上述相同的有效负载,并将每个参数设置为它自己的 PHP 变量。

在 PHP 脚本端点内,我手动设置用户名、密码和帐户代码。

回到 Postman,我随后仅将有效负载发送到 PHP 脚本端点。

我在 Postman 中收到 200 OK 响应,但在响应正文中,我回显了状态,并收到了 401 状态,这告诉我登录凭据不正确。

以下是 PHP 脚本:

<?php
  $payload = json_decode(file_get_contents("php://input"), true);

  $email = $payload["email"];
  $firstName = $payload['fields']['first_name'];
  $lastName = $payload['fields']['last_name'];
  $country = $payload['fields']['country'];
  $mrc_c3 = $payload['fields']['mrc_c3'];
  $mrc_date_c3 = $payload['fields']['mrc_date_c3'];

  $url = "https://original.endpoint.com/";
  $xun = "USERNAME";
  $xpw = "PASSWORD";
  $xac = "ACCOUNT CODE";

  $content = '{
    "email": "' . $email . '",
    "overwrite": true,
    "fields": { 
            "first_name": "' . $firstName . '",
            "last_name": "'.$lastName.'",
            "country": "' . $country . '",
            "mrc_c3": "' . $mrc_c3 . '",
            "mrc_date_c3": "' . $mrc_date_c3 . '"
        }
   }';
  }';

$curl = curl_init( $url );
curl_setopt( $curl, CURLOPT_HEADER, false );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $curl, CURLOPT_HTTPHEADER, array(
     "Content-type: application/json",
    "USERNAME: $xun",
    "PASSWORD: $xpw",
    "ACCOUNT_CODE: $xac" 
) );
curl_setopt( $curl, CURLOPT_POST, true );
curl_setopt( $curl, CURLOPT_POSTFIELDS, $content );
$json_response = curl_exec( $curl );
$status = curl_getinfo( $curl, CURLINFO_HTTP_CODE );

if ( $status != 200 && $status != 201 ) {
    error_log( "Error: call to URL $url failed with status $status, response $json_response, curl_error " . curl_error( $curl ) . ", curl_errno " . curl_errno( $curl ) );
}

echo "status: " . $status;  // <-- print the status in Postman

curl_close( $curl );

$response = json_decode( $json_response, true );
?>

让我重申一下,我从 Postman 本身获得了 200 OK 响应,但是当我从 PHP 脚本内部打印出状态时,我获得了 401 响应。

屏幕截图供参考:

在此处输入图片描述

PHP 脚本中的凭据确实正确。所以我不确定为什么我会收到 401 响应。

请帮忙。

当我将 json_decode 更改为 json_encode 时,我可以像这样 print_r 有效负载:

print_r($payload);

它在 Postman 中的显示如下:

"{\n \"email\": \"[email protected]\",\n \"overwrite\": true,\n \"fields\": {\n \"first_name\": \"John\",\n
\"last_name\": \"Doe\",\n \"country\": \"Chile\",\n \"mrc_c3\": \"300.00\",\n \"mrc_date_c3\": \"10\/16\/24\"\n }\n}"
  • 1 1 个回答
  • 29 Views

1 个回答

  • Voted
  1. Best Answer
    Sahil Bisht
    2024-10-16T23:11:19+08:002024-10-16T23:11:19+08:00

    好的,您遇到的问题可能与 curl_setopt() 函数中传递凭据的方式有关。以下是主要问题:

    在 curl_setopt( $curl, CURLOPT_HTTPHEADER, array(...) ) 部分中,您直接传递了 $xun、$xpw 和 $xac,但这不起作用。您需要将它们作为实际标头的一部分包含在内。

    通常,用户名、密码和帐户代码等凭据要么以特定格式(如基本身份验证的授权标头)在标头中发送,要么作为请求正文的一部分发送。假设您想将它们作为标头传递,则应明确设置标头。以下是如何修改脚本以正确添加凭据:

    $curl = curl_init( $url );
    curl_setopt( $curl, CURLOPT_HEADER, false );
    curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );
    curl_setopt( $curl, CURLOPT_HTTPHEADER, array(
         "Content-Type: application/json",
         "Username: $xun",
         "Password: $xpw",
         "Account-Code: $xac" 
    ));
    curl_setopt( $curl, CURLOPT_POST, true );
    curl_setopt( $curl, CURLOPT_POSTFIELDS, $content );
    $json_response = curl_exec( $curl );
    $status = curl_getinfo( $curl, CURLINFO_HTTP_CODE );
    
    if ( $status != 200 && $status != 201 ) {
        error_log( "Error: call to URL $url failed with status $status, response $json_response, curl_error " . curl_error( $curl ) . ", curl_errno " . curl_errno( $curl ) );
    }
    
    echo "status: " . $status;  // <-- print the status in Postman
    
    curl_close( $curl );
    
    $response = json_decode( $json_response, true );
    
    • 1

相关问题

  • 将复制活动的序列号添加到 Blob

  • Packer 动态源重复工件

  • 选择每组连续 1 的行

  • 图形 API 调用列表 subscribedSkus 状态权限不足,但已授予权限

  • 根据列值创建单独的 DF 的函数

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    为什么这个简单而小的 Java 代码在所有 Graal JVM 上的运行速度都快 30 倍,但在任何 Oracle JVM 上却不行?

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    何时应使用 std::inplace_vector 而不是 std::vector?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Martin Hope
    Aleksandr Dubinsky 为什么 InetAddress 上的 switch 模式匹配会失败,并出现“未涵盖所有可能的输入值”? 2024-12-23 06:56:21 +0800 CST
  • Martin Hope
    Phillip Borge 为什么这个简单而小的 Java 代码在所有 Graal JVM 上的运行速度都快 30 倍,但在任何 Oracle JVM 上却不行? 2024-12-12 20:46:46 +0800 CST
  • Martin Hope
    Oodini 具有指定基础类型但没有枚举器的“枚举类”的用途是什么? 2024-12-12 06:27:11 +0800 CST
  • Martin Hope
    sleeptightAnsiC `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它? 2024-11-09 07:18:53 +0800 CST
  • Martin Hope
    The Mad Gamer 何时应使用 std::inplace_vector 而不是 std::vector? 2024-10-29 23:01:00 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST
  • Martin Hope
    MarkB 为什么 GCC 生成有条件执行 SIMD 实现的代码? 2024-02-17 06:17:14 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve