Hi Ulf,

I've done HTTP requests in Flink using OkHttp library
<http://square.github.io/okhttp/>. I found it practical and easy to use.
Here is how I used it to make a POST request for each incoming element in
the stream and ouput the response:

DataStream<String> stream = ....

stream.map(new RichMapFunction<String, String>() {

    OkHttpClient client;

    @Override
    public void open(Configuration config) throws IOException {
        client = new OkHttpClient();
    }

    @Override
    public String map(String in) throws Exception {

        okhttp3.Request request = new okhttp3.Request.Builder()
                    .url("http://localhost:8080";)
                    .post(RequestBody.create(MediaType.parse("text/plain;
charset=utf-8"), in))
                    .build();
            Response response = client.newCall(request).execute();
            if (response.code() != 200) {
                throw new Exception("Failed request");
            }
            String result = response.body().string();
            return result;
    }
})

I hope this helps.

Best,
Yassine


2017-03-02 14:17 GMT+01:00 Alex De Castro <alex.decas...@lab49.com>:

> Hi Ulf,
>
> I’ve had similar problem, before but from a sink perspective: I had to
> create a HTTP sink for a Kafka REST API. I’ve used scalaj-http
> https://github.com/scalaj/scalaj-http which is a wrapper for the
> corresponding Java lib.
>
>
>
> For example,
>
> https://github.com/scalaj/scalaj-http
>
>
>
> For example
>
>
>
> *class *HttpSink *extends *SinkFunction[Message]{
>   *private val **secretkey *= *new *GetToken().*token *
>
>   *def *sendMessage(message: Message):String = Http("
> http://XXX.XXX.XX.XXX:5000/api/message";) // <-- GLOBAL var
>     .header("Content-Type","application/json")
>     .header("Authorization", s"Bearer *$**secretkey*")
>     .postData(message.*data*).asString.body
>
>   @throws[Exception]
>   *override def *invoke(message: Message): Unit = {
>     log.info(sendMessage(message))
>   }
> }
>
>
>
> I image for a http source, you could send a request to the REST API
> periodically and convert the micro-batches into a stream. I’d love to know
> about other alternatives.
>
>
>
> Cheers,
>
> Alex
>
> *From: *Ulf Thomas <u...@relayr.de>
> *Reply-To: *"user@flink.apache.org" <user@flink.apache.org>
> *Date: *Thursday, March 2, 2017 at 12:58 PM
> *To: *"user@flink.apache.org" <user@flink.apache.org>
> *Subject: *Http Requests from Flink
>
>
>
> Hello,
>
>
>
> I've been trying to perform HTTP requests from a Flink Program but I
> wasn't successful :-(.
>
>
>
> Does anybody here has done this before and can point me to an working
> library?
>
>
>
> I've attached a small demo project in case someone wants to try to solve
> this.
>
>
>
> Best,
>
>
>
> --
>
> --
> Ulf Thomas
> Software Developer
> relayr
> This email and any attachments may contain information which is
> confidential and/or privileged. The information is intended exclusively for
> the addressee and the views expressed may not be official policy, but the
> personal views of the originator. If you are not the intended recipient, be
> aware that any disclosure, copying, distribution or use of the contents is
> prohibited. If you have received this email and any file transmitted with
> it in error, please notify the sender by telephone or return email
> immediately and delete the material from your computer. Internet
> communications are not secure and Lab49 is not responsible for their abuse
> by third parties, nor for any alteration or corruption in transmission, nor
> for any damage or loss caused by any virus or other defect. Lab49 accepts
> no liability or responsibility arising out of or in any way connected to
> this email.
>

Reply via email to