Reputation: 638
I just can't get this HTTP4 working. I'm trying to do a POST request to a site that is https. however, nothing seems to work. can someone tell me what the right way is to perform a HTTPS POST with HTTP4 ? thank you so much, really struggling. just need to know what I'm doing wrong... something simple always turns south.
I've tried.
http4://d1e5-95edc7a5cef2-uaa.run.aws-usw02-pr.ice.io:443/oauth/token
https://d1e5-95edc7a5cef2-uaa.run.aws-usw02-pr.ice.io/oauth/token
http4://d1e5-95edc7a5cef2-uaa.run.aws-usw02-pr.ice.io/oauth/token
https://d1e5-95edc7a5cef2-uaa.run.aws-usw02-pr.ice.io:443/oauth/token
http4:https://d1e5-95edc7a5cef2-uaa.run.aws-usw02-pr.ice.io:443/oauth/token
but nothing seems to work?
Upvotes: 1
Views: 8940
Reputation: 638
camel-http4 component is suitable for what I am trying to achieve. I only need to produce to an endpoint. I am not trying to expose a web service. But, thank you for your response.
camel-http4 vs camel-jetty
You can only produce to endpoints generated by the camel-http4 component. Therefore it should never be used as input into your Camel Routes. To bind/expose an HTTP endpoint via a HTTP server as input to a Camel route, use the Jetty Component instead.
I found that the proper way to define a HTTP4 endpoint is
http4:hostname[:port][/resourceUri][?options]
the issue I am having is with the dynamic toD route, and the substitution of the Exchange.HTTP_URI setting, this is not working as it should.
therefore, using a uri such as
http4://d1e53858-2903-4c21-86c0-95edc7a5cef2.uaa.run.aws-us.ice.io:443/oauth/token
works. the mechanism, isn't working.
Exchange.HTTP_URI
The URI to call. The value of this option will override the existing URI that's set directly on the endpoint. It's not the same as the Camel endpoint URI, where you can configure endpoint options such as security etc. This header does not support that, it's only the URI of the HTTP server.
<route
id="core.getToken.route"
autoStartup="true" >
<from id="getToken" ref="getToken" />
<process ref="uAARequestTokenProcessor" />
<!-- <log message="Message after uAARequestTokenProcessor: ${body}" loggingLevel="INFO"/> -->
<setHeader headerName="CamelHttpMethod">
<constant>POST</constant>
</setHeader>
<!-- <setHeader headerName="CamelHttpUri">
<simple>${header.TOKENURL}</simple>
</setHeader> -->
<log message="HTTP4 POST headers: ${headers}" loggingLevel="DEBUG"/>
<log message="HTTP4 POST body: ${body}" loggingLevel="DEBUG"/>
<to uri="http4://d1e-uaa.run.aws-usw02-pr.ice.io:443/oauth/token?throwExceptionOnFailure=false" />
<toD uri="${header.TOKENURL}?throwExceptionOnFailure=false" />
<log message="After HTTP4 POST: ${body}" loggingLevel="INFO"/>
<to uri="{{accessToken}}" />
</route>
so for me right now, setting the Exchange.HTTP_URI isn't overriding the URI defined in the endpoint
where Exchange.HTTP_URI is defined as : TOKENURL=http4://d1e53858-2903-4c21-86c0-95edc7a5cef2.uaa.run.aws-usw02-pr.ice.io:443/oauth/token
this is what is not working. thanks.
Upvotes: 0
Reputation: 76
Please use bridgeEndpoint=true so you can go outside the server
Upvotes: 1
Reputation: 638
ok, I hope this helps someone, the solution was 2 fold. first the proxy wasn't getting acknowledged, due to leading protocol def, http:// I used just the IP address and the cononical name with no http:// and I was able to receive a 504 Gateway timeout error. so the HTTP4 endpoint is working as it was set to look like
http4://myhost:443/path
http4://uaa-svc-prod.app-api.aws-usw02-pr.io:443/oauth/token
I was able to get the request working by first making a hard endpoint
<to uri="http4://uaa-svc-prod.app-api.aws-usw02-pr.io:443/oauth/token?throwExceptionOnFailure=false" />
so the endpoint http4 override by setting
m.setHeader(Exchange.HTTP_URI, tokenUrl);
worked.
I then tried using the XML setting he override in the route.
<log message="HTTP4 POST headers: ${headers}" loggingLevel="DEBUG"/>
<setHeader headerName="CamelHttpUri">
<simple>${header.TOKENURL}?throwExceptionOnFailure=false</simple>
</setHeader>
<to uri="http4://uaa-svc-prod.app-api.aws-usw02-pr.io:443/oauth/token?throwExceptionOnFailure=false" />
this worked also. :) however I was still getting the 504 gateway timeout error returned.
I tried using the https:// URI in for the override URI
https://uaa-svc-prod.app-api.aws-usw02-pr.io/oauth/token
and the http4:// endpoint was overridden with the https:// URI and now I am getting a CamelHttpResponseCode=401, CamelHttpResponseText=Unauthorized
so, it is working now, happy happy joy joy... in conclusion do not include the http:// protocol def in the proxy setting. Use either the IP or the cononical name.
<camelContext
id="com.ge.digital.passthru.coreCamelContext"
trace="true"
xmlns="http://camel.apache.org/schema/blueprint"
allowUseOriginalMessage="false"
streamCache="true"
errorHandlerRef="deadLetterErrorHandler" >
<properties>
<property key="http.proxyHost" value="PITC-Zscaler.proxy.corporate.america.com"/>
<property key="http.proxyPort" value="80"/>
</properties>
when defining the HTTP4:// endpoint use the syntax
http4:hostname[:port][/resourceUri][?options]
and the URI set by Exchange.HTTP_URI over riding the endpoint def contains the https://myhost/path where you are calling.
this is what worked for me, I hope this helps newbies like myself. thanks everyone.
Upvotes: 0