Using body content to generate a correct response
Maxim Dounin
mdounin at mdounin.ru
Thu Jan 9 15:55:31 UTC 2014
Hello!
On Tue, Jan 07, 2014 at 03:20:41PM -0200, Guido Accardo wrote:
> Hi everyone,
>
> I'm using Nginx to serve applications of Real Time Bidding listening in
> different machines inside of my network. Each one of these applications is
> handling request from only one exchange and I'm successfully proxying the
> content to the correct applications by using upstreams.
>
> One thing that I'm doing when I need to do some modifications in one o more
> of these applications is use "return 204" (for RTB system using OpenRTB
> protocl, HTTP 204 means NO BID) to not forward content. This was working
> great until now that my employer has decided to include another exchange,
> in consequence, another application. The new exchange is not OpenRTB based,
> it uses another protocol to answer, and of course no bid response is
> different too.
>
> In order to correctly answer with no bid I have to parse XML content which
> is inside of the request sent by the exchange. This is the form of the
> response I have to send:
>
>
> <bidResp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns="urn:yahoo:amp:3pi:bidResp"
> xsi:schemaLocation="urn:yahoo:amp:3pi:bidResp BidResponse.xsd"
> version="6.0">
> <bidResEnv signature="00C745CC3125610C5C1A30EBC9388FC7F8FE1F21"
> signType="SHA-1" token="1218078703"/>
>
> <bidResponseSet numResp="1">
> <bidResponse>
> <oppId>da21129c-aca1-11e2-8c8c-2be3e1d9a996</oppId>
> <advId>502863</advId>
> <buyerLine>4372011</buyerLine>
> <noBid/>
> </bidResponse>
> </bidResponseSet>
>
>
> OppId, advId, buyerLine, bidResEnv signature are items that comes with the
> request.
>
> As you can see I have 2 challenges here:
>
> * Parse XML body content with Nginx
> * Manipulate It to generate the correct answer
>
> Do I need to develop a Nginx plugin or there is a simpler way to parse the
> body content and use it to answer?
>
> I know that Nginx can use headers from the request in the response, so I
> presume that something with the body could also done.
Trivial solution would be to use embedded perl to read a request
body and return appropriate answer, see here:
http://nginx.org/en/docs/http/ngx_http_perl_module.html
It should be also possible to do this using 3rd party Lua module.
--
Maxim Dounin
http://nginx.org/
More information about the nginx-devel
mailing list