AgentSkillsCN

reqwest-form-feature-required

修复在 Rust 中使用 reqwest 时出现的“未找到名为 `form` 的方法”或“未解析方法 `form`”的错误。适用场景如下:(1) 编译时未找到 reqwest 的 `.form()` 方法;(2) 向 OAuth 令牌端点等 API 发送 URL 编码的表单数据;(3) 从较旧的 reqwest 版本升级而来,而旧版本中无需启用特性标志即可使用 `form` 方法。对于 reqwest 0.11 及以上版本,必须在 Cargo.toml 中显式启用 `form` 特性。

SKILL.md
--- frontmatter
name: reqwest-form-feature-required
description: |
  Fix for "no method named `form` found" or "use of unresolved method `form`" errors
  when using reqwest in Rust. Use when: (1) reqwest `.form()` method not found at compile
  time, (2) sending URL-encoded form data to APIs like OAuth token endpoints,
  (3) upgrading from older reqwest versions where form worked without feature flag.
  The `form` feature must be explicitly enabled in Cargo.toml for reqwest 0.11+.
author: Claude Code
version: 1.0.0
date: 2026-01-23

reqwest Form Feature Required

Problem

When using reqwest to send form-encoded data (like OAuth token requests), the .form() method may not be available, causing confusing compiler errors that suggest the method doesn't exist.

Context / Trigger Conditions

Error messages you'll see:

code
error[E0599]: no method named `form` found for struct `RequestBuilder` in the current scope

or

code
error[E0599]: no variant or associated item named `form` found
help: there is a method `or` with a similar name

Common scenarios:

  • Making OAuth2 token refresh/exchange requests
  • Submitting form data to APIs that expect application/x-www-form-urlencoded
  • Migrating code from reqwest < 0.11 where form was available by default
  • Using workspace dependencies where not all features are inherited

Solution

Add the form feature to your reqwest dependency in Cargo.toml:

toml
# Single crate
reqwest = { version = "0.13", features = ["form"] }

# With other common features
reqwest = { version = "0.13", features = ["json", "form", "rustls"] }

# In workspace Cargo.toml
[workspace.dependencies]
reqwest = { version = "0.13", default-features = false, features = ["json", "form", "rustls", "http2"] }

Note: In reqwest 0.11+, many methods are behind feature flags:

  • json - for .json() method
  • form - for .form() method
  • multipart - for multipart form uploads
  • cookies - for cookie jar support
  • stream - for streaming request/response bodies

Verification

After adding the feature, run cargo check and the error should be resolved:

bash
cargo check
# Should compile without the "no method named form" error

Example

Before (fails to compile):

rust
let response = client
    .post("https://oauth2.googleapis.com/token")
    .form(&[
        ("client_id", "xxx"),
        ("client_secret", "yyy"),
        ("grant_type", "refresh_token"),
    ])
    .send()
    .await?;

Fix in Cargo.toml:

toml
[dependencies]
reqwest = { version = "0.13", features = ["form"] }

Notes

  • This is a common gotcha when using default-features = false with reqwest
  • The error message suggests or as an alternative method, which is misleading
  • When using workspace dependencies, ensure features are properly propagated to member crates
  • The form method serializes data as application/x-www-form-urlencoded
  • For file uploads, use multipart feature and .multipart() method instead

References