【问题标题】:Apigee HTTPBasicAuth timing outApigee HTTPBasicAuth 超时
【发布时间】:2022-12-10 04:56:42
【问题描述】:

所以我有这个使用需要通过 Apigee 的 HTTPBsaicAuth 的工作请求。我使用 Basic Auth 配置了我的 Apigee 代理以检索标头中的用户名和密码但是我继续收到错误:

{"fault":{"faultstring":"Gateway Timeout","detail":{"errorcode":"messaging.adaptors.http.flow.GatewayTimeout"}}}

这是没有 Apigee 传递的原始请求:

import requests
from requests.auth import HTTPBasicAuth
url = "https://myapi.com/path"
auth =  HTTPBasicAuth("username", "password")
response = requests.get(url, auth=auth, verify=False)

上面的请求没有问题。我的新请求,包括标头中的 Apigee url 和 apikey:

import requests
from requests.auth import HTTPBasicAuth
url = "https://apigee-proxy.com/basepath/path"
headers = {
    "apikey" : "XXXXXX",
    "username": "username",
    "password": "password"

}
response = requests.get(url, headers=headers, verify=False)

代理设置,非常基本:

<ProxyEndpoint name="default">
    <Description/>
    <FaultRules/>
    <PreFlow name="PreFlow">
        <Request/>
           <Step>
              <Name>Extract-Variables-1</Name>
           </Step>
           <Step>
              <Name>Basic-Authentication-1</Name>
           </Step>
        <Response/>
    </PreFlow>
    <PostFlow name="PostFlow">
        <Request/>
        <Response/>
    </PostFlow>
    <Flows>
    </Flows>
    <HTTPProxyConnection>
        <BasePath>/basepath</BasePath>
        <Properties/>
        <VirtualHost>default</VirtualHost>
    </HTTPProxyConnection>
    <RouteRule name="default">
        <TargetEndpoint>default</TargetEndpoint>
    </RouteRule>
</ProxyEndpoint>

更新:Basic-Authenication-1.xml:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
    <Source>request</Source>
    <Header name="username">
        <Pattern ignoreCase="true">{username}</Pattern>
    </Header>
    <Header name="password">
        <Pattern ignoreCase="true">{password}</Pattern>
    </Header>
    <VariablePrefix>auth</VariablePrefix>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</ExtractVariables>

Basic-Authentication-1 政策:

<BasicAuthentication async="false" continueOnError="true" enabled="true" name="Basic-Authentication-1">
    <DisplayName>Basic Authentication-1</DisplayName>
    <Operation>Encode</Operation>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <User ref="auth.username"/>
    <Password ref="auth.password"/>
    <AssignTo createNew="false">request.header.Authorization</AssignTo>
</BasicAuthentication>

默认路由规则:

<TargetEndpoint name="default">
    <Description/>
    <FaultRules/>
    <PreFlow name="PreFlow">
        <Request/>
        <Response/>
    </PreFlow>
    <PostFlow name="PostFlow">
        <Request/>
        <Response/>
    </PostFlow>
    <Flows/>
    <HTTPTargetConnection>
        <LoadBalancer>
            <Server name="my_target"/>
        </LoadBalancer>
        <Path>/</Path>
    </HTTPTargetConnection>
</TargetEndpoint>

目标服务器环境变量“my_target”=myapi.com,port=443

有什么我想念的吗?任何帮助表示赞赏。

更新:代理现在包含 Extract-Variables-1,我可以看到正在应用身份验证标头,但仍然超时..:

【问题讨论】:

    标签: python python-requests apigee


    【解决方案1】:

    我相信您缺少的是提取变量策略。尝试提取用户和密码值并传递获得的值。

    就像是

     <ExtractVariables name='EV-Auth'>
      <Source>request</Source>
      <Header name="username">
        <Pattern ignoreCase="true">**</Pattern>
      </Header>
      <Header name="password">
        <Pattern ignoreCase="true">**</Pattern>
      </Header>
      <VariablePrefix>auth</VariablePrefix>
      <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    </ExtractVariables>
    

    并将其用作

    <BasicAuthentication async="false" continueOnError="true" enabled="true" name="Basic-Authentication-1">
        <DisplayName>Basic Authentication-1</DisplayName>
        <Operation>Encode</Operation>
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <User ref="auth.username"/>
        <Password ref="auth.password"/>
        <AssignTo createNew="false">request.header.Authorization</AssignTo>
    </BasicAuthentication>
    

    【讨论】:

    • 嘿 Eddoasso,我尝试实施您的解决方案,但我仍然收到超时错误。模式匹配的 ** 也给我错误,我对您的解决方案进行编辑后提取成功。
    猜你喜欢
    • 2014-12-06
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 2012-02-20
    • 2015-11-25
    相关资源
    最近更新 更多