Making HTTP request to Google Forms

I am getting a HTTP 301 error that makes no sense to me when I try to do a GET request. The reason it makes no sense is that the Location: piece in the response header is identical to the URL I am sending in the GET request.

Here is the code I am using:

/*
 * Created by ArduinoGetStarted.com
 *
 * This example code is in the public domain
 *
 * Tutorial page: https://arduinogetstarted.com/tutorials/arduino-http-request
 */

#include <SPI.h>
#include <Ethernet.h>

// replace the MAC address below by the MAC address printed on a sticker on the Arduino Shield 2
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

EthernetClient client;

int    HTTP_PORT   = 80;
String HTTP_METHOD = "GET";
//char   HOST_NAME[] = "maker.ifttt.com";
char HOST_NAME[] = "docs.google.com";
//String PATH_NAME   = "/trigger";
String PATH_NAME = "/forms/d/e/1FAIpQLSeGskK9trCex4EPtS99ZRlVyXKUhTugSQUhdw3-Ugkhr19awQ/formResponse";
//String queryString = "?value1=26&value2=70";;
String queryString = "?usp=pp_url&entry.879050922=FROMforum&submit=Submit";;

void setup() {
  Serial.begin(9600);

  // initialize the Ethernet shield using DHCP:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to obtaining an IP address using DHCP");
    while(true);
  }

  // connect to web server on port 80:
  if(client.connect(HOST_NAME, HTTP_PORT)) {
    // if connected:
    Serial.println("Connected to server");
    // make a HTTP request:
    // send HTTP header
    client.println(HTTP_METHOD + " " + PATH_NAME + queryString + " HTTP/1.1");
    client.println("Host: " + String(HOST_NAME));
    client.println("Content-Type: application/x-www-form-urlencoded"); 
    client.println("Accept: */*");
    client.println("Connection: close");
    client.println(); // end HTTP header

    while(client.connected()) {
      if(client.available()){
        // read an incoming byte from the server and print it to serial monitor:
        char c = client.read();
        Serial.print(c);
      }
    }

    // the server's disconnected, stop the client:
    client.stop();
    Serial.println();
    Serial.println("disconnected");
  } else {// if not connected:
    Serial.println("connection failed");
  }
}

void loop() {

}

And here is the output/response header as printed in the serial monitor:

Connected to server
HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=UTF-8
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: Mon, 01 Jan 1990 00:00:00 GMT
Date: Sun, 11 Apr 2021 12:42:21 GMT
Location: https://docs.google.com/forms/d/e/1FAIpQLSeGskK9trCex4EPtS99ZRlVyXKUhTugSQUhdw3-Ugkhr19awQ/formResponse?usp=pp_url&entry.879050922=FROMforum&submit=Submit
P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info."
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
Content-Security-Policy: frame-ancestors 'self'
X-XSS-Protection: 1; mode=block
Server: GSE
Set-Cookie: NID=213=QFR3lHYlQXXstJ24SJ6fQeUPCtXseIbclqRDsI8WbhZsVJ3zg57gTMY9OXdOJ10RIF74UqU2-GLhLQM_LKaGV5RaSLywwb7IgW4Vh07cS2V02Lgc7wRIbLdYIuqNqibn2oezDJ-hWMbEjCtcU8CnWhGbqmxOTJww__WbnFE353I; expires=Mon, 11-Oct-2021 12:42:21 GMT; path=/; domain=.google.com; HttpOnly
Accept-Ranges: none
Vary: Accept-Encoding
Connection: close
Transfer-Encoding: chunked

161
<HTML>
<HEAD>
<TITLE>Moved Permanently</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Moved Permanently</H1>
The document has moved <A HREF="https://docs.google.com/forms/d/e/1FAIpQLSeGskK9trCex4EPtS99ZRlVyXKUhTugSQUhdw3-Ugkhr19awQ/formResponse?usp=pp_url&amp;entry.879050922=FROMARDUINOforsure&amp;submit=Submit">here</A>.
</BODY>
</HTML>

Clearly its connecting, I just don’t understand why I am getting a 301 error but the Location is no different than what I put in the request.

I am using a mega2560 with a W5100 ethernet shield.

It has redirected your request to an HTTPS address. Can your mega2560 with a W5100 ethernet shield support an HTTPS connection ?

The output shows that you need to make an HTTPS request instead of HTTP.
The Official Ethernet library for Ethernet Shield 2 does not support HTTPS. You can see the list of shield/board support HTTPS in this Arduino - HTTPS request tutorial

Can I ask how or maybe why that is the case. When I do the request on say reqbin.com, it works whether I put https or http in the URL, and either one in the Raw option it says HTTP/1.1. I know nothing about http (if that wasn’t obvious already), so I don’t understand why it wouldn’t work on arduino when it works on reqbin (with what seems to be http not https).

Maybe reqbin supports both HTTP and HTTPS