     [Blog](https://scrapfly.io/blog)   /  [curl](https://scrapfly.io/blog/tag/curl)   /  [How to POST JSON With cURL: Inline, File, and jq](https://scrapfly.io/blog/posts/how-to-curl-json)   # How to POST JSON With cURL: Inline, File, and jq

 by [Ziad Shamndy](https://scrapfly.io/blog/author/ziad) Aug 17, 2026 10 min read [\#curl](https://scrapfly.io/blog/tag/curl) 

 [  ](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fscrapfly.io%2Fblog%2Fposts%2Fhow-to-curl-json "Share on LinkedIn") [  ](https://x.com/intent/tweet?url=https%3A%2F%2Fscrapfly.io%2Fblog%2Fposts%2Fhow-to-curl-json&text=How%20to%20POST%20JSON%20With%20cURL%3A%20Inline%2C%20File%2C%20and%20jq "Share on X") [  ](https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fscrapfly.io%2Fblog%2Fposts%2Fhow-to-curl-json "Share on Facebook")    

 

 

Summarize this article with

 [  ](https://chat.openai.com/?q=Summarize%20this%20article%20and%20explain%20how%20Scrapfly%20helps%20me%20scrape%20any%20website%20at%20scale%20and%20bypass%20anti-bot%20systems%20for%20my%20use%20case%3A%20https%3A%2F%2Fscrapfly.io%2Fblog%2Fposts%2Fhow-to-curl-json) [  ](https://claude.ai/new?q=Summarize%20this%20article%20and%20explain%20how%20Scrapfly%20helps%20me%20scrape%20any%20website%20at%20scale%20and%20bypass%20anti-bot%20systems%20for%20my%20use%20case%3A%20https%3A%2F%2Fscrapfly.io%2Fblog%2Fposts%2Fhow-to-curl-json) [  ](https://x.com/i/grok?text=Summarize%20this%20article%20and%20explain%20how%20Scrapfly%20helps%20me%20scrape%20any%20website%20at%20scale%20and%20bypass%20anti-bot%20systems%20for%20my%20use%20case%3A%20https%3A%2F%2Fscrapfly.io%2Fblog%2Fposts%2Fhow-to-curl-json) [  ](https://www.perplexity.ai/search/new?q=Summarize%20this%20article%20and%20explain%20how%20Scrapfly%20helps%20me%20scrape%20any%20website%20at%20scale%20and%20bypass%20anti-bot%20systems%20for%20my%20use%20case%3A%20https%3A%2F%2Fscrapfly.io%2Fblog%2Fposts%2Fhow-to-curl-json) [  ](https://www.google.com/search?udm=50&aep=11&q=Summarize%20this%20article%20and%20explain%20how%20Scrapfly%20helps%20me%20scrape%20any%20website%20at%20scale%20and%20bypass%20anti-bot%20systems%20for%20my%20use%20case%3A%20https%3A%2F%2Fscrapfly.io%2Fblog%2Fposts%2Fhow-to-curl-json) 



   

A JSON body can look correct in your terminal and still fail at the server. The shell can drop a quote, or curl can send form data instead of JSON. Either way, the API answers with a 400 you can't explain from the command alone.

This [cURL](https://scrapfly.io/blog/posts/how-to-use-curl-for-web-scraping) guide shows inline, file, and stdin JSON with `--json`. It also covers Bearer auth, response parsing with `jq`, and reading a 400, 401, or 415 before you guess at a fix.

[Sending HTTP Requests With Curlie: A better cURLIn this guide, we'll explore Curlie, a better cURL version. We'll start by defining what Curlie is and how it compares to cURL. We'll also go over a step-by-step guide on using and configuring Curlie to send HTTP requests.](https://scrapfly.io/blog/posts/sending-http-requests-with-curlie-a-better-curl)



## Key Takeaways

- **`--json` needs curl 7.82.0+:** older installs need `--data-binary` plus two headers.
- **Inline, file, and stdin are one flag:** `--json`, `--json @file`, `--json @-` match bytes.
- **curl sends bytes, jq reads them:** validate with `jq empty`, then parse with `jq`.
- **jq beats string interpolation:** `--arg`/`--argjson` escape quotes and newlines for you.
- **PowerShell quoting isn't Bash quoting:** build the payload with `ConvertTo-Json` instead.
- **Check the status before the JSON:** a 400, 401, or 415 usually points at the headers.

**Get web scraping tips in your inbox**Trusted by 100K+ developers and 30K+ enterprises. Unsubscribe anytime.







## How Do You POST JSON With cURL Using --json?

Pass a JSON object to curl's `--json` flag, followed by the URL, and curl sends it as the request body. The flag implies a POST request and adds both `Content-Type: application/json` and `Accept: application/json` on its own.

bash```bash
curl --json '{"name":"Alice","age":30}' https://httpbin.dev/post | jq '{method, headers, data, json}'
```



json```json
{
  "method": "POST",
  "headers": {
    "Accept": [
      "application/json"
    ],
    "Accept-Encoding": [
      "gzip"
    ],
    "Content-Length": [
      "25"
    ],
    "Content-Type": [
      "application/json"
    ],
    "Host": [
      "httpbin.dev"
    ],
    "User-Agent": [
      "curl/8.7.1"
    ]
  },
  "data": "{\"name\":\"Alice\",\"age\":30}",
  "json": {
    "age": 30,
    "name": "Alice"
  }
}
```



httpbin.dev echoes `method` as `POST` and both headers as arrays, the same two headers `--json` adds without an `-H` flag anywhere in the command. curl never checks that the string is valid JSON before sending it. A broken body still goes out over the wire, which is why the errors section further down starts from evidence, not from guessing at syntax.



## How Do You Send Inline, File, or stdin JSON With cURL?

`--json` accepts the same three sources every time: a literal string, a file with `@`, or stdin with `@-`. Pick the source by where the payload comes from, not by habit.

| Source | Best fit |
|---|---|
| Inline string | Short, fixed payloads you can read in the command itself |
| File (`@payload.json`) | Reusable or version-controlled payloads |
| stdin (`@-`) | Payloads generated or transformed by another command |

The next three sections send the same object through each path so only the input method changes.

### How Do You Send an Inline JSON Body With cURL?

Wrap the JSON object in single quotes in Bash or Zsh so the shell passes it through untouched. That exact single-quote form doesn't carry over to Windows PowerShell, covered later in this guide.

bash```bash
curl --json '{"language": "python", "tool": "curl"}' https://httpbin.dev/post \
  | jq '.json'
```



json```json
{
  "language": "python",
  "tool": "curl"
}
```



The server's `json` field matches the inline object exactly. `--json` already set the method and both headers on its own, without an `-H` or `-X POST`flag anywhere in the command.

### How Do You Send a JSON File With cURL?

Save the payload to a file, check it's valid JSON, then send it with `--json @payload.json`. The leading `@` tells curl to read the option value from a file instead of treating it as a literal string.

json```json
{"name": "Alice", "age": 30}
```



bash```bash
jq empty payload.json && curl --json @payload.json https://httpbin.dev/post
```



json```json
{
  "headers": {
    "Accept": ["application/json"],
    "Content-Length": ["25"],
    "Content-Type": ["application/json"],
    "User-Agent": ["curl/8.7.1"]
  },
  "method": "POST",
  "data": "{\"name\":\"Alice\",\"age\":30}",
  "json": {"age": 30, "name": "Alice"}
}
```



`jq empty` prints nothing and exits 0 on valid JSON, so the `&&` only runs curl when the file parses. On curl builds older than 7.82.0, without `--json`, `--data-binary` plus both headers reproduces the same request:

bash```bash
curl --data-binary @payload.json \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  https://httpbin.dev/post
```



Both commands returned the identical parsed body, method, and headers in testing, so the expanded form is a safe fallback, not a guess.

### How Do You Pipe JSON From stdin Into cURL?

Use `--json @-` when the payload comes from another command instead of a fixed file. The dash tells curl to read the request body from stdin.

bash```bash
jq -n '{name: "Alice", age: 30, source: "stdin"}' | curl --json @- https://httpbin.dev/post
```



json```json
{
  "method": "POST",
  "headers": {
    "Content-Type": [
      "application/json"
    ]
  },
  "json": {
    "age": 30,
    "name": "Alice",
    "source": "stdin"
  }
}
```



`jq -n` builds a fresh JSON object with no input, and curl reads it straight off the pipe. Passing `--json` more than once on the same command line concatenates the raw text of each value. That doesn't merge two JSON objects into one. The concatenation only works if the joined text is still valid JSON.



## Should You Use cURL --json, --data-binary, or -d?

Use `--json` on curl 7.82.0 and newer. Fall back to `--data-binary` plus both headers on older installs, and reserve bare `-d` for cases where you want its form-encoded default.

| Flag | Implies POST | Content-Type | Accept | Minimum curl version |
|---|---|---|---|---|
| `--json` | Yes | `application/json` | `application/json` | 7.82.0 |
| `--data-binary` + `-H` | Yes | Set manually | Set manually | Any |
| `-d` / `--data` | Yes | `application/x-www-form-urlencoded` (default) | `*/*` (default) | Any |

bash```bash
curl --json '{"name":"Alice","age":30}' https://httpbin.dev/post

curl --data-binary '{"name":"Alice","age":30}' \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  https://httpbin.dev/post
```



text```text
same parsed json body: True
same method: True
same content-type: True
same accept: True
same raw data string: True
```



Both requests came back with matching bodies, methods, and headers. Bare `-d` with no `-H` sends `application/x-www-form-urlencoded` instead, which is why the errors section further down treats a mismatched Content-Type as its own row.

If you'd rather build these requests visually than memorize flags, a GUI client covers the same ground with a request builder and saved variables.

[Using API Clients For Web Scraping: PostmanIn this article, we'll explore the use of API clients for web scraping. We'll start by explaining how to locate hidden API requests on websites. Then, we'll explore importing, manipulating, and exporting them using Postman to develop efficient API-based web scrapers.](https://scrapfly.io/blog/posts/using-api-clients-for-web-scraping-postman)



## How Do You Build Safe JSON Payloads With jq and cURL?

Shell string interpolation doesn't escape quotes, newlines, or control characters. Build the payload with `jq -n --arg` for strings and `--argjson`for numbers, booleans, arrays, or objects instead of typing JSON by hand.

bash```bash
NAME='Ali "the Builder" Alice'
AGE=30

jq -n --arg name "$NAME" --argjson age "$AGE" '{name: $name, age: $age}' \
  | curl --json @- https://httpbin.dev/post \
  | jq '{method, headers, data, json}'
```



json```json
{
  "method": "POST",
  "headers": {
    "Accept": ["application/json"],
    "Accept-Encoding": ["gzip"],
    "Content-Length": ["55"],
    "Content-Type": ["application/json"],
    "Host": ["httpbin.dev"],
    "User-Agent": ["curl/8.7.1"]
  },
  "data": "{\n  \"name\": \"Ali \\\"the Builder\\\" Alice\",\n  \"age\": 30\n}\n",
  "json": {
    "age": 30,
    "name": "Ali \"the Builder\" Alice"
  }
}
```



The embedded double quote in `NAME` survives untouched because `jq` escapes it before the JSON leaves the shell. Building the same string with `"{\"name\": \"$NAME\"}"` would have broken the JSON at that same quote.

### How Do POSIX Shells and PowerShell Quote cURL JSON Differently?

Single-quoted JSON is the clean path in Bash and Zsh, but PowerShell parses quotes and native command arguments differently. Build the payload with `ConvertTo-Json` instead of typing raw JSON in the command line.

powershell```powershell
$body = [ordered]@{ name = "Alice"; age = 30 } | ConvertTo-Json -Compress
$body
```



text```text
{"name":"Alice","age":30}
```



`-Compress` strips the whitespace `ConvertTo-Json` adds by default, and `[ordered]` keeps the keys in the order you wrote them. Pipe that string into `curl.exe --json @-`, the same stdin mechanism already confirmed above. Call the binary as `curl.exe` explicitly. Windows PowerShell 5.1 documents an alias from the bare `curl` name to `Invoke-WebRequest`, which doesn't accept curl's flags.



## How Do You Add a Bearer Token to a cURL JSON Request?

Add `Authorization: Bearer` with its own `-H` flag alongside `--json`, which still sets its own two headers without overriding the one you added.

bash```bash
export API_TOKEN=YOUR_SCRAPFLY_KEY
curl -H "Authorization: Bearer $API_TOKEN" \
  --json '{"name":"Alice","age":30}' \
  https://httpbin.dev/post
```



json```json
{
  "method": "POST",
  "headers": {
    "Authorization": [
      "Bearer YOUR_SCRAPFLY_KEY"
    ],
    "Content-Type": [
      "application/json"
    ],
    "Accept": [
      "application/json"
    ]
  }
}
```



The token came from an environment variable, not a literal string in the command. It never lands in shell history, a committed script, or a terminal window you might screenshot. For broader authentication patterns, see [How to Set cURL Authentication - Full Examples Guide](https://scrapfly.io/blog/answers/how-to-set-authorization-with-curl-full-examples-guide).



Scrapfly

#### Scale your web scraping effortlessly

Scrapfly handles proxies, browsers, and anti-bot bypass — so you can focus on data.

[Try Free →](https://scrapfly.io/register)## How Do You Read and Parse a JSON Response From cURL?

curl writes the response bytes it receives and doesn't parse them. Pipe a JSON response to `jq` to format it or pull out a field.

bash```bash
curl -s --fail-with-body --json '{"name":"Alice","age":30}' https://httpbin.dev/post \
  | jq -er '.json.name'
```



text```text
Alice
```



`jq -er` prints the raw string and exits 0 because `.json.name` resolved to a real value. A script can check that exit code on its own, separate from whether the HTTP request itself succeeded.

bash```bash
echo '{"ok": false}' | jq -e '.ok'
echo 'not json' | jq -e '.ok'
```



text```text
false
jq: parse error: Invalid numeric literal...
```



The first command exits 1 because `.ok` resolved to `false`. The second exits 5 because the input wasn't valid JSON at all.

jq's manual documents exit code 1 for a false or null result under `--exit-status`, but never ties exit code 5 to a parse failure. That number is only the manual's default for the unrelated `halt_error` builtin, not a documented `--exit-status` outcome.

### How Do You Inspect cURL HTTP Status and Response Headers?

Use `--show-headers` to see response headers during manual debugging, and `-w '%{http_code}'` when a script needs the status code on its own.

bash```bash
curl -s -o /dev/null -w "%{http_code}\n" -d '{"name":"Alice"}' https://httpbin.dev/post
```



text```text
200
```



`-o /dev/null` discards the body so only the status code prints. `curl -v`digs deeper during manual debugging, but its trace prints every header you sent in plain text, including `Authorization`. Avoid it on a request carrying a real token.



## How Do You Fix cURL JSON 400, 401, and 415 Errors?

A status code narrows down the cause, but the response body and the API's own docs confirm the exact fix.

| Status | Likely cause | First check | Fix direction |
|---|---|---|---|
| `400 Bad Request` | Malformed JSON or a missing required field | `jq empty` on the body you sent, then the response text | Fix the JSON syntax, or add the field the API expects |
| `401 Unauthorized` | Missing, expired, or malformed credentials | The `Authorization` header and its scheme | Supply or refresh the token, and don't log it |
| `415 Unsupported Media Type` | The `Content-Type` you sent doesn't match the body | The `Content-Type` header your request sent | Use `--json`, or set `Content-Type: application/json` yourself |

bash```bash
curl -s --fail-with-body --json '{"name": "Alice", "age": }' https://httpbin.dev/post
```



text```text
error parsing request body: invalid character '}' looking for beginning of value
```



`--fail-with-body` makes curl print the error body instead of swallowing it on a failing status, and this response points straight at the broken character.

A 415 usually shows up when a form-encoded body reaches an endpoint that only accepts JSON. The default `Content-Type` for `-d` never matches what the API expects.

httpbin.dev returns 200 for the bare `-d` request and for any well-formed body no matter the `Content-Type` you send. httpbin.dev can drop to 400 for a badly formed body, like broken multipart data or invalid JSON, but it never returns 415.

Run that same `-w` check against your real target instead. If it comes back 415, switch that request to `--json` or set `Content-Type: application/json`by hand.



## How Do You POST JSON Through the Scrapfly SDK?

A plain JSON POST like the ones above works until the target also expects a real browser fingerprint, a residential IP, or JavaScript rendering. That's where a managed request layer helps. Install the SDK first:

bash```bash
pip install scrapfly-sdk
```



This guide validated the example below against scrapfly-sdk 0.11.1, released 2026-06-14.

python```python
from scrapfly import ScrapflyClient, ScrapeConfig, ScrapeApiResponse

scrapfly = ScrapflyClient(key="YOUR_SCRAPFLY_KEY")
api_response: ScrapeApiResponse = scrapfly.scrape(ScrapeConfig(
    url="https://httpbin.dev/post",
    method="POST",
    headers={"content-type": "application/json"},
    data={"name": "Alice", "age": 30},
    # enable automatic bot bypass
    asp=True,
    # customize your proxies
    country="US",
    proxy_pool="public_residential_pool",
))
print(api_response.scrape_result["content"])
```



json```json
{"method": "POST", "data": "{\"name\": \"Alice\", \"age\": 30}", "json": {"age": 30, "name": "Alice"}}
```



The SDK JSON-encodes the `data` dict because the `content-type` header contains `application/json`. It then routes the request to httpbin.dev through Scrapfly's proxy and anti-bot layer.

A live run against the real API returned status 200. The echoed body matched the plain curl requests earlier in this guide.



ScrapFly's [Web Scraping API](https://scrapfly.io/products/web-scraping-api) is a single HTTP endpoint for collecting web data at scale, with a **99.99% success rate** across **130M+ proxies in 190+ countries**.

- [Anti-Scraping Protection bypass](https://scrapfly.io/docs/scrape-api/anti-scraping-protection) - automatically defeats Cloudflare, DataDome, PerimeterX, Akamai, and 90+ other bot systems.
- [Smart proxy rotation](https://scrapfly.io/docs/scrape-api/proxy) - residential and datacenter pools with country and ASN level geo-targeting.
- [JavaScript rendering](https://scrapfly.io/docs/scrape-api/javascript-rendering) - render SPAs and dynamic pages through real cloud browsers.
- [Browser automation scenarios](https://scrapfly.io/docs/scrape-api/javascript-scenario) - scroll, click, fill forms, and wait for elements without managing a browser fleet.
- [Format conversion](https://scrapfly.io/docs/scrape-api/getting-started#api_param_format) - return pages as HTML, JSON, clean text, or LLM ready Markdown.
- [Session management](https://scrapfly.io/docs/scrape-api/session) - keep cookies, headers, and IPs consistent across multi step flows.
- [Smart caching](https://scrapfly.io/docs/scrape-api/getting-started#api_param_cache) - cache successful responses to cut cost on repeat scraping jobs.
- [Python](https://scrapfly.io/docs/sdk/python), [TypeScript](https://scrapfly.io/docs/sdk/typescript), [Scrapy](https://scrapfly.io/docs/sdk/scrapy), and [no-code integrations](https://scrapfly.io/docs/integration/getting-started) including [Make](https://scrapfly.io/integration/make), [n8n](https://scrapfly.io/integration/n8n), [Zapier](https://scrapfly.io/integration/zapier), [LangChain](https://scrapfly.io/integration/langchain), and [LlamaIndex](https://scrapfly.io/integration/llamaindex).

The same `ScrapeConfig` object that sends this JSON body also handles proxy routing and anti-bot bypass. A plain curl request can't do that alone.



### Power your scraping with Scrapfly

Forget about getting blocked. Scrapfly handles anti-bot bypasses, browser rendering, and proxy rotation so you can focus on the data.



[Try for FREE!](https://scrapfly.io/register)



## FAQ

Does cURL Validate or Parse JSON?No. `--json` sets the request headers and method but never checks that the payload is valid JSON. Run it through `jq empty` before sending, and `jq`again on the response.







Does cURL --json Work on Every Version?No. The official curl documentation says curl added `--json` in version 7.82.0. Run `curl --version` first, and use `--data-binary` plus both headers on anything older. This guide checked every command against curl 8.21.0 and jq 1.8.2 on 2026-08-10.







Can cURL Send a JSON Body With GET?curl will attach content to a GET request, but RFC 9110 says GET content has no generally defined semantics. Some implementations reject it and close the connection over the request-smuggling risk, so use the API's documented POST method instead. See [cURL GET requests](https://scrapfly.io/blog/posts/how-to-use-curl-get-requests)for plain GET syntax.







Is It Legal to Send Automated JSON Requests With cURL?Sending requests with curl is legal. What you do with the response depends on the target's terms of service, robots.txt, and data-protection law. Check those before automating at scale.







What's the Difference Between --json and --data-binary for JSON?`--json` is shorthand for `--data-binary` plus `Content-Type: application/json`and `Accept: application/json`. They send identical bytes. `--json` saves you from typing the two headers by hand.









## Summary

Reach for `--json` first on any curl install newer than 7.82.0. It covers inline, file, and stdin payloads with the same flag, and sets the right headers without extra typing. Pick the input method by where the data comes from. Use inline for a short, fixed object, a file for anything reusable, and stdin for anything another command generated.

Let `jq` do the JSON work curl won't. Build payloads with `jq -n --arg`/`--argjson` instead of shell interpolation. Parse responses with `jq -e` so a script fails loudly instead of silently.

When a request fails, check the status code and response body before you touch the JSON syntax. A managed layer like Scrapfly's Web Scraping API covers the same JSON POST once the target also needs proxy rotation or anti-bot handling.



Legal Disclaimer and PrecautionsThis tutorial covers popular web scraping techniques for education. Interacting with public servers requires diligence and respect:

- Do not scrape at rates that could damage the website.
- Do not scrape data that's not available publicly.
- Do not store PII of EU citizens protected by GDPR.
- Do not repurpose *entire* public datasets which can be illegal in some countries.

Scrapfly does not offer legal advice but these are good general rules to follow. For more you should consult a lawyer.

 

   [  Add as a preferred source ](https://google.com/preferences/source?q=scrapfly.io) Table of Contents















 

  Table of Contents- [Key Takeaways](#key-takeaways)
- [How Do You POST JSON With cURL Using --json?](#how-do-you-post-json-with-curl-using-json)
- [How Do You Send Inline, File, or stdin JSON With cURL?](#how-do-you-send-inline-file-or-stdin-json-with-curl)
- [How Do You Send an Inline JSON Body With cURL?](#how-do-you-send-an-inline-json-body-with-curl)
- [How Do You Send a JSON File With cURL?](#how-do-you-send-a-json-file-with-curl)
- [How Do You Pipe JSON From stdin Into cURL?](#how-do-you-pipe-json-from-stdin-into-curl)
- [Should You Use cURL --json, --data-binary, or -d?](#should-you-use-curl-json-data-binary-or-d)
- [How Do You Build Safe JSON Payloads With jq and cURL?](#how-do-you-build-safe-json-payloads-with-jq-and-curl)
- [How Do POSIX Shells and PowerShell Quote cURL JSON Differently?](#how-do-posix-shells-and-powershell-quote-curl-json-differently)
- [How Do You Add a Bearer Token to a cURL JSON Request?](#how-do-you-add-a-bearer-token-to-a-curl-json-request)
- [How Do You Read and Parse a JSON Response From cURL?](#how-do-you-read-and-parse-a-json-response-from-curl)
- [How Do You Inspect cURL HTTP Status and Response Headers?](#how-do-you-inspect-curl-http-status-and-response-headers)
- [How Do You Fix cURL JSON 400, 401, and 415 Errors?](#how-do-you-fix-curl-json-400-401-and-415-errors)
- [How Do You POST JSON Through the Scrapfly SDK?](#how-do-you-post-json-through-the-scrapfly-sdk)
- [FAQ](#faq)
- [Summary](#summary)
 
    Join the Newsletter  Get monthly web scraping insights 

 

  



Scale Your Web Scraping

Anti-bot bypass, browser rendering, and rotating proxies, all in one API. Start with 1,000 free credits.

  No credit card required  1,000 free API credits  Anti-bot bypass included 

 [Start Free](https://scrapfly.io/register) [View Docs](https://scrapfly.io/docs/onboarding) 

 Not ready? Get our newsletter instead. 

 

 ## Related Articles

 [  

 http 

### What is HTTP 401 Error and How to Fix it

Discover the HTTP 401 error meaning, its causes, and solutions in this comprehensive guide. Learn how 401 unauthorized e...

 

 ](https://scrapfly.io/blog/posts/what-is-http-401-error-and-how-to-fix-it) [  

 http 

### What is HTTP 415 Error? (Unsupported Media Type)

Quick look at HTTP status code 415 — what does it mean and how can it be prevented and bypassed in scraping?

 

 ](https://scrapfly.io/blog/posts/what-is-http-415-error-unsupported-media-type) [  

 http tools 

### How to Use cURL For Web Scraping

In this article, we'll go over a step-by-step guide on sending and configuring HTTP requests with cURL. We'll also explo...

 

 ](https://scrapfly.io/blog/posts/how-to-use-curl-for-web-scraping) 

  ## Related Questions

- [ Q How To Download a File With cURL? ](https://scrapfly.io/blog/answers/how-to-download-file-curl)
- [ Q How to load local files in Puppeteer? ](https://scrapfly.io/blog/answers/how-to-load-local-files-in-puppeteer)
- [ Q How To Send cURL POST Requests? ](https://scrapfly.io/blog/answers/how-to-send-a-post-request-using-curl)
- [ Q How to add headers to every or some scrapy requests? ](https://scrapfly.io/blog/answers/how-to-add-headers-to-every-or-some-scrapy-requests)
 
  



   



 Scale your web scraping effortlessly, **1,000 free credits** [Start Free](https://scrapfly.io/register)