Java中基于Curl检测URL重定向的技术问题求助
Got it, let's break down your problem and fix this step by step. Your core issue is almost certainly that the URLs pulled from your store table's link field contain shell special characters (like spaces, &, ?, $) that are being misinterpreted when you build your curl command, triggering that internal error. Here's how to diagnose and resolve it:
1. First, Validate the Raw URL from Your Database
Start by confirming you're actually getting a clean, unmodified URL from the database:
- When querying the database (taking MySQL as an example), use flags to avoid extra formatting that could mangle your URL:
The# Fetch the URL directly, no extra table formatting or line breaks url=$(mysql -u your_username -p'your_password' -D your_db --batch --raw -e "SELECT link FROM store WHERE your_filter_condition;")--batchand--rawflags ensure you get just the raw URL string, no fluff. - Next, check for hidden characters or weird formatting in the URL:
This command shows every character (including invisible ones like line breaksecho "$url" | cat -A$or tabs^I). If you see these, clean them up either in the database (usingTRIM()functions) or add a cleanup step in your script.
2. Safely Wrap the URL in Your Curl Command
Shells treat unquoted special characters as command separators or extra parameters—so always wrap your URL variable in double quotes to keep it as a single, intact argument for curl.
Here's the correct curl setup to check redirects and compare against your demo URL:
# Define your target demo URL demo_url="https://your-specified-demo-url.com" # Fetch the final redirected URL (silently, no extra output) final_redirected_url=$(curl -L -s -o /dev/null -w "%{url_effective}" "$url") # Compare and output true/false if [ "$final_redirected_url" = "$demo_url" ]; then echo "true" else echo "false" fi
Key flags explained:
-L: Tells curl to follow all redirects-s: Silences progress bars and non-essential output-o /dev/null: Discards the actual page content (we only care about the final URL)-w "%{url_effective}": Prints the final URL after all redirects are processed
3. Handle Edge Cases (Super Special Characters)
If your URLs ever contain double quotes (rare, but possible), escape them first to avoid breaking the shell:
# Auto-escape all shell-special characters in the URL escaped_url=$(printf "%q" "$url") # Use the escaped URL in your curl command final_redirected_url=$(curl -L -s -o /dev/null -w "%{url_effective}" "$escaped_url")
printf "%q" takes care of escaping every character that could trip up the shell, making the URL 100% safe to use.
4. Debugging Trick If You're Still Stuck
If you're still getting errors, print the exact curl command that's being executed to spot where things go wrong:
echo "Executing: curl -L -s -o /dev/null -w "%{url_effective}" "$url""
This lets you see if the URL is being truncated, split into multiple parameters, or has unexpected characters you missed.
内容的提问来源于stack exchange,提问作者priya sharma

