Docs / Your own connection

Your own connection

A client rarely knows what the other end of a connection actually sees. Between a program and a server there may be a proxy, a VPN, a sandbox that rewrites traffic and a CDN, and each may add or drop headers, change the protocol version or replace the address. Debugging from the client's own view of its request is guesswork.

These endpoints answer from the other side. /mirror returns the request line and headers as they reached this service, /ip gives the address the connection came from together with its autonomous system and the country where that address block is registered, and a set of probes tests what a client does: whether it follows redirects and how far, whether it keeps cookies, whether it runs JavaScript, which compression it accepts, whether it reads a streamed body to the end, and how long a URL survives the trip.

The limits of that view are part of the answer. The address seen is the address of the last hop that opened the connection, which for most automated clients is a cloud egress node or a proxy, not the machine running the code. Headers pass through at least one proxy of this service before they are shown, and letter case and order may change on the way; each response says what may have been altered.

Answers are never cached. Header values are shown back to you and are not stored; the request log keeps header names only.

Every endpoint in this group

/mirror

Your request as received: method, path, protocol, headers, TLS

curl "https://agent-helper.org/mirror"

/ip

Your egress address, its network (ASN) and registration country, and a humble agent/human guess

curl "https://agent-helper.org/ip"

/probe/redirect?[hops=]&[code=]&[location=]

Start a chain of redirects to see whether and how far your client follows them

hops (optional): chain length 1-20; code (optional): redirect status; location (optional): absolute or relative Location header

curl "https://agent-helper.org/probe/redirect"

/probe/redirect/{n}?of=&[code=]&[location=]

One step of the redirect chain; the last step reports how many were followed

n: step number; of: chain length; code (optional): redirect status; location (optional): absolute or relative

curl "https://agent-helper.org/probe/redirect/5?of=5"

/probe/js

HTML page that reports whether your client executes JavaScript (the only page on this service with a script)

curl "https://agent-helper.org/probe/js"

/probe/js/beacon?token=

Called by the script on /probe/js when JavaScript runs

token: token from /probe/js

curl "https://agent-helper.org/probe/js/beacon?token=0123456789abcdef"

/probe/js/result?token=

Whether the script of a /probe/js page load ran

token: token shown on /probe/js

curl "https://agent-helper.org/probe/js/result?token=0123456789abcdef"

/probe/cookie

Sets one random cookie and reports whether your client sent it back (the only cookie on this service)

curl "https://agent-helper.org/probe/cookie"

/probe/encoding

Which compression your client accepts; the reply is compressed with the best one we support

curl "https://agent-helper.org/probe/encoding"

/probe/chunked

Body streamed in 5 chunks over one second; the last line says whether you got all of it

curl "https://agent-helper.org/probe/chunked"

/probe/urllen?[sent=]

Length of the URL that reached us; append any path or query to test longer ones

sent (optional): how many bytes you believe you sent, so the two numbers can be compared

curl "https://agent-helper.org/probe/urllen"

/probe/urllen/{padding:path}?[sent=]

Same as /probe/urllen with arbitrary padding in the path

padding: anything; sent (optional): how many bytes you believe you sent

curl "https://agent-helper.org/probe/urllen/aaaaaaaaaa"