# GSOC23 : Guidance for project "High-level HTTP client library"

**URL:** <https://fortran-lang.discourse.group/t/gsoc23-guidance-for-project-high-level-http-client-library/5339>\
**Category:** GSoC-2023\
**Created:** [March 5, 2023, 9:48am UTC](https://fortran-lang.discourse.group/t/gsoc23-guidance-for-project-high-level-http-client-library/5339 "2023-03-05T09:48:54Z")\
**Posts on this page:** 20\
**Page:** 2

<div class="post-metadata">

**Author:** ![rajkumardongre](https://yyz2.discourse-cdn.com/free1/user_avatar/fortran-lang.discourse.group/rajkumardongre/32/2610_2.png) [@rajkumardongre](https://fortran-lang.discourse.group/u/rajkumardongre)\
**Post date:** [May 5, 2023, 1:57pm UTC](https://fortran-lang.discourse.group/t/gsoc23-guidance-for-project-high-level-http-client-library/5339/21 "2023-05-05T13:57:04Z")

</div>

> [@milancurcic](#):
>
> Congrats @rajkumardongre! I’ll set up a poll to find a common weekly day and time for the project group (you and mentors) to meet. Stay tuned.

Thank you so much for the congratulations! I’m excited, Looking forward to working with everyone!

---

<div class="post-metadata">

**Author:** ![Ubaid-Shaikh](https://avatars.discourse-cdn.com/v4/letter/u/43a26b/32.png) [@Ubaid-Shaikh](https://fortran-lang.discourse.group/u/Ubaid-Shaikh)\
**Post date:** [May 6, 2023, 2:55pm UTC](https://fortran-lang.discourse.group/t/gsoc23-guidance-for-project-high-level-http-client-library/5339/22 "2023-05-06T14:55:15Z")

</div>

Hearty Congratulations @rajkumardongre !!! Well deserved!

---

<div class="post-metadata">

**Author:** ![rajkumardongre](https://yyz2.discourse-cdn.com/free1/user_avatar/fortran-lang.discourse.group/rajkumardongre/32/2610_2.png) [@rajkumardongre](https://fortran-lang.discourse.group/u/rajkumardongre)\
**Post date:** [May 6, 2023, 5:26pm UTC](https://fortran-lang.discourse.group/t/gsoc23-guidance-for-project-high-level-http-client-library/5339/23 "2023-05-06T17:26:11Z")

</div>

Thank you so much @Ubaid-Shaikh

---

<div class="post-metadata">

**Author:** ![rajkumardongre](https://yyz2.discourse-cdn.com/free1/user_avatar/fortran-lang.discourse.group/rajkumardongre/32/2610_2.png) [@rajkumardongre](https://fortran-lang.discourse.group/u/rajkumardongre)\
**Post date:** [May 13, 2023, 9:10am UTC](https://fortran-lang.discourse.group/t/gsoc23-guidance-for-project-high-level-http-client-library/5339/24 "2023-05-13T09:10:31Z")

</div>

Hello everyone,

I have been working on creating a **High-level HTTP Client Library** , and I would like to share its description with you.

* * *

> The objective of this project is to develop a high-level library for making HTTP requests in Fortran, inspired by the widely used Python [requests](https://requests.readthedocs.io/en/latest/) library. This library aims to empower Fortran programmers by providing them with the capability to perform standard HTTP request methods such as GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, and PATCH. By offering this functionality, the library facilitates efficient communication with web services and APIs, eliminating the need for low-level network programming.
> 
> One possible implementation approach for this library is to utilize [fortran-curl](https://github.com/interkosmos/fortran-curl), which offers Fortran bindings to [libcurl](https://curl.se/libcurl/). By leveraging the power and flexibility of libcurl, we can create a more user-friendly interface in Fortran.
> 
> The primary advantage of this library is its ability to simplify the consumption of HTTP web services from Fortran applications. Instead of writing intricate low-level network code, Fortran programmers can utilize the library’s high-level API to effortlessly make HTTP requests and receive responses. This significantly saves time and effort, allowing programmers to focus on the higher-level aspects of their applications.

* * *

Now, I would like to choose a suitable name for this library. Here are some options I have come up with:

1. FortReq
2. FortCurl
3. FortConnect
4. FortWebReq
5. FortRest
6. WebFort
7. FortCurlClient
8. FortRequest
9. FortAPIConnect
10. FortranWebClient

I would appreciate your input in selecting the best name from these options, and I am also open to any other suggestions or discussions regarding the naming of this library.

click [here](https://docs.google.com/document/d/1ElADEKWtVh8CdSP1P5F4B6MhRQZ2_cXxqGfEpwn8Hqs/edit#) for full project information.

---

<div class="post-metadata">

**Author:** ![vmagnin](https://yyz2.discourse-cdn.com/free1/user_avatar/fortran-lang.discourse.group/vmagnin/32/28_2.png) [@vmagnin](https://fortran-lang.discourse.group/u/vmagnin)\
**Post date:** [May 13, 2023, 9:31am UTC](https://fortran-lang.discourse.group/t/gsoc23-guidance-for-project-high-level-http-client-library/5339/25 "2023-05-13T09:31:57Z")

</div>

> [@rajkumardongre](#):
>
> I would appreciate your input in selecting the best name from these options, and I am also open to any other suggestions or discussions regarding the naming of this library.

I think the name should clearly evoke the Web, so my preferred ones are _WebFort_ and _FortranWebClient_.

Other suggestions:

- _ForWeb_,
- _ForWWW_,
- _ForHTTP_

Here, the prefix “For” also simply stands for the English word _for_ (a library _for_ the Web).

---

<div class="post-metadata">

**Author:** ![milancurcic](https://yyz2.discourse-cdn.com/free1/user_avatar/fortran-lang.discourse.group/milancurcic/32/2_2.png) [@milancurcic](https://fortran-lang.discourse.group/u/milancurcic)\
**Post date:** [May 13, 2023, 7:27pm UTC](https://fortran-lang.discourse.group/t/gsoc23-guidance-for-project-high-level-http-client-library/5339/26 "2023-05-13T19:27:59Z")

</div>

Thanks, @rajkumardongre, a few comments:

- See fortran-lang project names, all are short and kebab-case for those that use multiple words, so we should follow the same principle;
- Should include “http” in the name since that most precisely describes the functionality;
- On second thought, we should create the repo under fortran-lang Org for better visibility to everyone here (as opposed to under your account). In that case, we don’t need to mention the word fortran in the name.

All that said, I suggest we create a repo fortran-lang/http-client.

---

<div class="post-metadata">

**Author:** ![rajkumardongre](https://yyz2.discourse-cdn.com/free1/user_avatar/fortran-lang.discourse.group/rajkumardongre/32/2610_2.png) [@rajkumardongre](https://fortran-lang.discourse.group/u/rajkumardongre)\
**Post date:** [May 13, 2023, 8:42pm UTC](https://fortran-lang.discourse.group/t/gsoc23-guidance-for-project-high-level-http-client-library/5339/27 "2023-05-13T20:42:43Z")

</div>

Thankyou @vmagnin @milancurcic for your suggestions

---

<div class="post-metadata">

**Author:** ![rajkumardongre](https://yyz2.discourse-cdn.com/free1/user_avatar/fortran-lang.discourse.group/rajkumardongre/32/2610_2.png) [@rajkumardongre](https://fortran-lang.discourse.group/u/rajkumardongre)\
**Post date:** [May 19, 2023, 6:04pm UTC](https://fortran-lang.discourse.group/t/gsoc23-guidance-for-project-high-level-http-client-library/5339/28 "2023-05-19T18:04:07Z")

</div>

# Weekly Progress Reports

## Community Bonding Period

### Week 1 (11 May - 18 May)

- Setup FPM to Local Machine
  - resources : [Documentation](https://fpm.fortran-lang.org/en/install/index.html), [Youtube](https://youtu.be/gDxbLhWEDmk)
  - Run Fortran-curl Examples

- Go through Curl Documentation
- Go through Python Request Library(our Inspiration)
- Setup http-client github repo

---

<div class="post-metadata">

**Author:** ![milancurcic](https://yyz2.discourse-cdn.com/free1/user_avatar/fortran-lang.discourse.group/milancurcic/32/2_2.png) [@milancurcic](https://fortran-lang.discourse.group/u/milancurcic)\
**Post date:** [May 19, 2023, 6:21pm UTC](https://fortran-lang.discourse.group/t/gsoc23-guidance-for-project-high-level-http-client-library/5339/29 "2023-05-19T18:21:20Z")

</div>

Thanks @rajkumardongre. All, we have also created the http-client repo ([GitHub - fortran-lang/http-client: HTTP client library for Fortran](https://github.com/fortran-lang/http-client)) that we’ll be working on.

---

<div class="post-metadata">

**Author:** ![rajkumardongre](https://yyz2.discourse-cdn.com/free1/user_avatar/fortran-lang.discourse.group/rajkumardongre/32/2610_2.png) [@rajkumardongre](https://fortran-lang.discourse.group/u/rajkumardongre)\
**Post date:** [May 19, 2023, 6:27pm UTC](https://fortran-lang.discourse.group/t/gsoc23-guidance-for-project-high-level-http-client-library/5339/30 "2023-05-19T18:27:32Z")

</div>

Thank you

---

<div class="post-metadata">

**Author:** ![rajkumardongre](https://yyz2.discourse-cdn.com/free1/user_avatar/fortran-lang.discourse.group/rajkumardongre/32/2610_2.png) [@rajkumardongre](https://fortran-lang.discourse.group/u/rajkumardongre)\
**Post date:** [May 21, 2023, 6:36pm UTC](https://fortran-lang.discourse.group/t/gsoc23-guidance-for-project-high-level-http-client-library/5339/31 "2023-05-21T18:36:25Z")

</div>

Hello, everyone. We’re currently [discussing the API for making GET Requests](https://github.com/fortran-lang/http-client/issues/4) for the http-client project. We welcome any suggestions you may have.

---

<div class="post-metadata">

**Author:** ![rajkumardongre](https://yyz2.discourse-cdn.com/free1/user_avatar/fortran-lang.discourse.group/rajkumardongre/32/2610_2.png) [@rajkumardongre](https://fortran-lang.discourse.group/u/rajkumardongre)\
**Post date:** [May 27, 2023, 7:25am UTC](https://fortran-lang.discourse.group/t/gsoc23-guidance-for-project-high-level-http-client-library/5339/32 "2023-05-27T07:25:47Z")

</div>

# Weekly Progress Reports

## Community Bonding Period

### Week 2 (18 May - 25 May)

- [Discuss the API to make a GET request](https://github.com/fortran-lang/http-client/issues/4#top).
- [Add fortran-curl as dependency and a minimal GET request example](https://github.com/fortran-lang/http-client/commit/45600b033072dd2a48e55f59801479ded976ccb1).
- Explore the [fhash](https://github.com/LKedward/fhash) fpm package.

---

<div class="post-metadata">

**Author:** ![rajkumardongre](https://yyz2.discourse-cdn.com/free1/user_avatar/fortran-lang.discourse.group/rajkumardongre/32/2610_2.png) [@rajkumardongre](https://fortran-lang.discourse.group/u/rajkumardongre)\
**Post date:** [June 3, 2023, 8:30pm UTC](https://fortran-lang.discourse.group/t/gsoc23-guidance-for-project-high-level-http-client-library/5339/33 "2023-06-03T20:30:34Z")

</div>

# Weekly Progress Reports

## Community Bonding Period

### Week 3 (26 May - 2 May)

- Go through [Packaging with fpm](https://fortran-lang.github.io/fpm/page/Packaging.html)
- Review other fpm packages code base for good practices ([fhash](https://github.com/LKedward/fhash), [jsonff](https://gitlab.com/everythingfunctional/jsonff), [neural-fortran](https://github.com/modern-fortran/neural-fortran), [stdlib](https://github.com/fortran-lang/stdlib), and many more)
- Read [Reclaiming .f file extension for modern Fortran (free form)](https://github.com/fortran-lang/fpm/issues/363)
- [Migrated code into different files](https://github.com/fortran-lang/http-client/commit/5f293228032bbec8e3c00a94767f3cda1c454bcf)
- [Added Response header](https://github.com/fortran-lang/http-client/commit/90f0a9539e90379e16e69133b420c34c64bdb06d)
- [Added test for GET Request](https://github.com/fortran-lang/http-client/commit/9be87072289cb6217137a88df9f05763b54b7a7f)
- [Added github workflow](https://github.com/fortran-lang/http-client/commit/c1efef853eb1a8ce1ecd1ba8f60f9cc67899bc4c)

---

<div class="post-metadata">

**Author:** ![rajkumardongre](https://yyz2.discourse-cdn.com/free1/user_avatar/fortran-lang.discourse.group/rajkumardongre/32/2610_2.png) [@rajkumardongre](https://fortran-lang.discourse.group/u/rajkumardongre)\
**Post date:** [June 10, 2023, 7:20pm UTC](https://fortran-lang.discourse.group/t/gsoc23-guidance-for-project-high-level-http-client-library/5339/34 "2023-06-10T19:20:21Z")

</div>

# Weekly Progress Reports

## **Post-Community Bonding Period**

### Week 4 (2 May - 9 May)

- Go through [Object-oriented programming](https://fortranwiki.org/fortran/show/Object-oriented+programming) in Fortran
- [Discussion about the storage of request and response header](https://github.com/fortran-lang/http-client/issues/11)
- [Discussion about the storage of Cookies](https://github.com/fortran-lang/http-client/issues/22)

---

<div class="post-metadata">

**Author:** ![rajkumardongre](https://yyz2.discourse-cdn.com/free1/user_avatar/fortran-lang.discourse.group/rajkumardongre/32/2610_2.png) [@rajkumardongre](https://fortran-lang.discourse.group/u/rajkumardongre)\
**Post date:** [June 16, 2023, 4:49pm UTC](https://fortran-lang.discourse.group/t/gsoc23-guidance-for-project-high-level-http-client-library/5339/35 "2023-06-16T16:49:18Z")

</div>

# Weekly Progress Reports

## **Post-Community Bonding Period**

### Week 5 (9 May - 16 May)

- [Revise the API used for sending and receiving request and response headers.](https://github.com/fortran-lang/http-client/commit/17137085e60ac5d3f6bba45e1fcad1bc08d32d4e)
- [Allow access to header values based on their respective names.](https://github.com/fortran-lang/http-client/commit/fb951e74c5b3b3538f544f884ab0cd5dc9245b84)
- [Modify the tests to reflect the changes made to the API.](https://github.com/fortran-lang/http-client/commit/8faa323f4281aeb26b495a529940261234faaab8)
- [Include an example demonstrating how to download a file.](https://github.com/fortran-lang/http-client/commit/0ba84f256a7bd494a7a3c18d9201c31b8388857f)
- [Discussion regarding the API to be used for making a POST request.](https://github.com/fortran-lang/http-client/issues/24)

---

<div class="post-metadata">

**Author:** ![rajkumardongre](https://yyz2.discourse-cdn.com/free1/user_avatar/fortran-lang.discourse.group/rajkumardongre/32/2610_2.png) [@rajkumardongre](https://fortran-lang.discourse.group/u/rajkumardongre)\
**Post date:** [June 23, 2023, 3:58pm UTC](https://fortran-lang.discourse.group/t/gsoc23-guidance-for-project-high-level-http-client-library/5339/36 "2023-06-23T15:58:02Z")

</div>

# Weekly Progress Reports

## **Post-Community Bonding Period**

### Week 6 (16 May - 23 May)

- Resolve : [User-Agent header contains duplicate values in HTTP request](https://github.com/fortran-lang/http-client/issues/28)
- Implement: [Sending `POST` request](https://github.com/fortran-lang/http-client/commit/58f9a620fe5751d0c8a2239465596d58d8678391)
- PR: [Sending `Form-Data` using `POST` request](https://github.com/fortran-lang/http-client/pull/32)

---

<div class="post-metadata">

**Author:** ![rajkumardongre](https://yyz2.discourse-cdn.com/free1/user_avatar/fortran-lang.discourse.group/rajkumardongre/32/2610_2.png) [@rajkumardongre](https://fortran-lang.discourse.group/u/rajkumardongre)\
**Post date:** [July 2, 2023, 5:53am UTC](https://fortran-lang.discourse.group/t/gsoc23-guidance-for-project-high-level-http-client-library/5339/37 "2023-07-02T05:53:02Z")

</div>

# Weekly Progress Reports

## **Post-Community Bonding Period**

### Week 7 (24 May - 30 May)

- Implement functionality to support sending form data in HTTP requests.
- Explore the topic of including files in an HTTP request. ([resource 1](https://datatracker.ietf.org/doc/html/rfc7578#section-4), [resource 2](https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects#sending_files_using_a_formdata_object), [resource 3](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#multipart-form-data))
- Explore how to send multipart data form using libcurl.
- [PR](https://github.com/fortran-lang/http-client/pull/33): Demonstrating sending files via HTTP `POST` request

---

<div class="post-metadata">

**Author:** ![rajkumardongre](https://yyz2.discourse-cdn.com/free1/user_avatar/fortran-lang.discourse.group/rajkumardongre/32/2610_2.png) [@rajkumardongre](https://fortran-lang.discourse.group/u/rajkumardongre)\
**Post date:** [July 14, 2023, 2:00pm UTC](https://fortran-lang.discourse.group/t/gsoc23-guidance-for-project-high-level-http-client-library/5339/38 "2023-07-14T14:00:57Z")

</div>

# Weekly Progress Reports

## **Post-Community Bonding Period**

### Week 8 ( 30 May - 7 July)

- Added Functionality to support sending form data in HTTP requests.
- Replace `form_type`, `header_type` and `file_type` with `pair_type` derived type.
- Add Tests for all HTTP Methods.

---

<div class="post-metadata">

**Author:** ![rajkumardongre](https://yyz2.discourse-cdn.com/free1/user_avatar/fortran-lang.discourse.group/rajkumardongre/32/2610_2.png) [@rajkumardongre](https://fortran-lang.discourse.group/u/rajkumardongre)\
**Post date:** [July 14, 2023, 2:08pm UTC](https://fortran-lang.discourse.group/t/gsoc23-guidance-for-project-high-level-http-client-library/5339/39 "2023-07-14T14:08:56Z")

</div>

# Weekly Progress Reports

## **Post-Community Bonding Period**

### Week 9 ( 7 July - 14 July)

- Testing Package on Intel Compiler.
- Added Support for HTTP Authentication.
- Added Support for setting request timeout.
- Working on Real-world example programs using the `http_client` package

---

<div class="post-metadata">

**Author:** ![rajkumardongre](https://yyz2.discourse-cdn.com/free1/user_avatar/fortran-lang.discourse.group/rajkumardongre/32/2610_2.png) [@rajkumardongre](https://fortran-lang.discourse.group/u/rajkumardongre)\
**Post date:** [July 31, 2023, 6:38pm UTC](https://fortran-lang.discourse.group/t/gsoc23-guidance-for-project-high-level-http-client-library/5339/40 "2023-07-31T18:38:00Z")

</div>

# Weekly Progress Reports

## **Post-Community Bonding Period**

### Week 10 ( 14 July - 21 July)

- Discussion about defining the version number for the package.
- Work on writing a tutorial project using the `http_client` package
  - Project : [github-org-analyzer](https://github.com/rajkumardongre/github-org-analyzer)
  - This Fortran package provides procedures to analyze GitHub organizations and retrieve valuable information about their repositories. By leveraging the power of the `http_client` package, this analyzer fetches data from the GitHub API to generate insightful reports.

# Weekly Progress Reports

## **Post-Community Bonding Period**

### Week 11 ( 21 July - 28 July)

- Work on Real-world projects, using `http_client` [link](https://github.com/rajkumardongre/fortran-xkcd/tree/http_client_version)
- Work on creating a full tutorial page for `http_client`. ([any suggestion welcome](https://github.com/fortran-lang/http-client/issues/42))
- Work on FORD documentation for the `http_client` package.

My apologies for the delayed updates.

[Previous page](https://fortran-lang.discourse.group/t/gsoc23-guidance-for-project-high-level-http-client-library/5339.md?page=1)

[Next page](https://fortran-lang.discourse.group/t/gsoc23-guidance-for-project-high-level-http-client-library/5339.md?page=3)
