This guide covers failed subscription downloads, unrecognized responses, and empty lists after updates in v2rayN, v2rayNG, and v2flyNG. Keep your existing working nodes, then check the link, request path, response body, and subscription group. Change one thing at a time to pinpoint whether the failure occurs during download, parsing, or display—rather than mistaking a subscription issue for a node problem.
First, tell download failures from parse errors and empty lists
Updating a subscription is not a connectivity test for its nodes. The client first requests the subscription URL, reads the response, identifies node entries, and then saves them to the relevant group. A failure at any stage can look like “no new nodes,” but each calls for a different fix.
- Download failed: The log shows a DNS lookup failure, connection timeout, certificate error, or HTTP error status. Check the link and network first; there’s no need to change VMess or VLESS node settings yet.
- Parse error: The client received a response but couldn’t identify any valid nodes. Common causes include a login page, an unsupported format, or a truncated subscription response.
- Empty list: The server may have returned an empty response, or search terms, the selected group, or node filters may be hiding the entries.
- Nodes are present but won’t connect: At least part of the subscription was parsed. Check node settings, system time, and server status instead of repeatedly updating the subscription.
Step 1: Make sure you copied a subscription URL
A subscription URL, account management page, and individual node share link are different things. Subscription URLs usually start with https://; links such as vmess:// and vless:// are for individual nodes and must be imported through the appropriate client feature. A long string of copied text is not necessarily a subscription URL.
-
Copy the original URL
Copy the URL again from your provider’s subscription page. Make sure you haven’t included explanatory text, quotation marks, or leading or trailing spaces. A shortened link shown in a chat message won’t work as-is.
-
Check the query parameters
Check everything after the question mark. Subscription tokens, parameter order, or signatures may be required for authorization. Don’t remove parameters or truncate anything after
&. -
Confirm the subscription is active
Check your account page for subscription access, expiration, and whether the URL has been reset. After a reset, save the new URL to the existing group; the old one may stop working immediately.
-
Update one group at a time
Save the URL, then update only that group and record the result. Don’t update multiple subscriptions at once, or errors from other groups may get mixed into the same log.
If a URL opens in your browser, that only proves the browser’s request path received some kind of response. The browser may have a login cookie or use a different proxy or DNS setup than the client. So “it opens in my browser” does not prove the client can retrieve a parseable subscription response.
Step 2: Compare direct and proxied download paths
Whether subscription updates use a proxy and which routing rules nodes use are separate settings. The client may download subscriptions through its own HTTP request component, without using the proxy core’s DNS, routing, or traffic-splitting rules. Changing the core’s routing mode alone may not change the subscription request path.
In common Windows v2rayN 6.x interfaces, open the “Subscription Group” menu and compare “Update All Subscriptions (without proxy)” with “Update All Subscriptions (through proxy).” Menu wording, parentheses, and group controls may differ in other versions, so use the options available in your current version. This guide doesn’t assume that one update method is the default in every version.
- Try without a proxy first: This is useful if you don’t have a working node or suspect your local proxy isn’t running. Note any error if it fails; don’t delete the group right away.
- Then try through a proxy: First confirm that the selected node can reach commonly used websites, then try updating again. If the selected node is already unavailable, it can’t download the new subscription for you.
- Check the local listener: If the log says the connection to
127.0.0.1was refused, check the client’s actual listening address and port.10808and10809are examples you may encounter while troubleshooting; they aren’t used by every version and don’t necessarily correspond to separate HTTP and SOCKS listeners. - Try another network: When possible, compare your current network with another trusted one. If only one network fails, check its DNS, access restrictions, or captive portal first.
On Android, check the saved URL under “Subscription Group Settings” in v2rayNG or v2flyNG, then use “Update subscription” from the menu. The wording may vary by version. If your version offers an option to use a proxy for updates, compare both paths. If it doesn’t, don’t apply desktop menu instructions to Android. Change only one update-path or network setting per test.
Use status codes to identify authorization, redirects, and blocks
If the log includes an HTTP status code, check it before inspecting the response body. These numbers are HTTP protocol statuses, not speed-test results or client version numbers. Even a 200 response may contain an error message or webpage instead of subscription data.
The examples below show HTTP status lines and actual error text that may appear in a request component. Clients, runtime environments, and interface languages may add other details. Diagnose the stage where the error occurred rather than relying on an exact wording match.
HTTP 401 Unauthorized
Why it happens and what to do: The request is missing valid credentials, or its token has expired. Copy the URL again from your account’s subscription page and check that the endpoint doesn’t require an already-authenticated web session.
HTTP 403 Forbidden
Why it happens and what to do: The server rejected the request, possibly because of permissions, access policies, or security rules. Check your account status, then give your provider the time, status code, and access method. A 403 alone doesn’t prove that your account has expired.
HTTP 407 Proxy Authentication Required
Why it happens and what to do: The proxy handling the request requires authentication; the subscription service may not be the problem. Check your system or network proxy credentials, or compare with an update made without a proxy.
The operation has timed out.
Why it happens and what to do: The request didn’t finish in time. It may be stuck during DNS lookup, connection, or response reading. Compare networks and download paths, then check nearby log entries. Simply increasing the timeout won’t fix an invalid URL.
For 301 or 302, check that the final response isn’t a login page. For 429, stop retrying and wait for the server’s Retry-After instructions. Repeatedly clicking update to see if it works can extend the rate limit.
Step 3: Check the response format and encoding
If the subscription downloads successfully but parsing still fails, focus on what the client actually received. Inspect the response only on your own device in a controlled environment, and don’t paste a full node configuration into an external tool. Node data may contain credentials, so handle it as carefully as the subscription URL.
| Response pattern | What it may mean | Next step |
|---|---|---|
Starts with <!DOCTYPE html> or <html |
Login page, error page, or network sign-in page | Get the original subscription URL again, then check the final redirect and access permissions |
Multiple vmess://, vless://, or similar share links |
Common format for a node list | Check whether your client version supports each link type and its parameters |
| A long block of Base64 text | May be an encoded node list | Make sure the response is complete. Let the client parse it first; if needed, decode it locally only |
| JSON or YAML text | May be a full configuration, an API error object, or another format | Check that it’s supported by the current subscription import feature; the file extension alone isn’t enough |
| Empty response or explanatory text only | No available entries, or a service-side error | Check account permissions, node filters, and the provider’s instructions |
Successful Base64 decoding doesn’t mean the nodes can be imported
Base64 is an encoding, not a subscription protocol. Successful decoding only means the text follows a particular encoding format; it doesn’t prove that the links inside are valid. A common VMess share link uses vmess:// followed by Base64-encoded JSON. VLESS share links usually put the identifier, address, and transport parameters in the URI, so they can’t be handled using the same fields.
- Don’t repeatedly decode the entire string: Percent-encoding in a VLESS link may be used for its path, remarks, or query parameters. Decoding and rebuilding the whole link can change how separators such as
&and#are interpreted. - Check for truncation or changes: Line breaks, full-width punctuation, missing characters, or a
+converted to a space can all cause parsing errors. Copy the original URL again instead of guessing at missing response content. - Use the right import feature: A proxy core’s ability to read a configuration doesn’t mean the client’s subscription feature can convert it into nodes. Use the appropriate feature for a full JSON configuration, a single node share link, or a subscription list.
- Check for unsupported fields: Older clients may not recognize some transport or security parameters. Note your current version, then check the download page for available clients. Don’t remove TLS, SNI, or other security settings just to get the import to work.
Step 4: Check groups, filters, and saved results
If the log shows a completed download and parsed nodes, check the list view instead of changing network settings again. In v2rayN, go to “Subscription Group” → “Subscription Group Settings” and check the URL for the current group. In v2rayNG and v2flyNG, check the relevant entry under “Subscription Group Settings.” Save buttons, filters, and refresh actions vary by version; the three clients don’t necessarily have identical features.
- Clear search: Clear the node search box and switch to the target subscription group or all-nodes view to rule out name filtering as the cause of an “empty list.”
- Check filters: If your version offers subscription regex filters, include rules, or exclude rules, note the current settings and temporarily disable filtering for one update.
- Make sure changes are saved: Confirm that the updated URL was saved. Pasting it into an edit box without confirming may leave the old URL in use.
- Test in isolation: If needed, create a temporary test group with only this subscription and update it separately. Keep the original group to avoid overwriting nodes that still work.
- Check which app you’re using: If you have multiple copies of v2rayN on your computer, confirm which one you’re operating and where its configuration is stored. Otherwise, you may change one copy and launch another.
“Enable system proxy,” “global routing,” and “use proxy for subscription updates” are not interchangeable settings. The first affects apps that follow the system proxy; the second controls the core’s outbound choice for connections it receives; only the last specifically describes how subscription requests are downloaded. Record the exact setting you change instead of saying only that “the proxy is on.”
Retest checklist and information to share
After making changes, update the target group once. To confirm it’s working, check the update log, node list, and an actual connection. No error doesn’t necessarily mean there are valid nodes, and a populated list doesn’t mean every server is reachable. If the subscription is restored but a node still times out, troubleshoot that as a separate connection issue.
- Confirmed the saved URL is a complete subscription URL, not an account page or single-node link.
- Checked account permissions and whether the URL was reset, and confirmed edits were saved.
- Recorded the results of updates made directly and through a working proxy, or noted that the current version has no such option.
- Recorded the HTTP status, exact error message, and stage of failure—not just “it doesn’t work.”
- Confirmed the response isn’t an HTML login page and is in a format supported by the current import feature.
- Ruled out an empty list caused by search, group selection, or subscription filters.
- Backed up the original configuration and avoided changing DNS, proxy, routing, and subscription format all at once during retesting.
For basic import instructions, see the Quick Start Guide. To distinguish local listener, system proxy, and routing issues, see the Troubleshooting Guide. Identify which stage is failing, then change only the setting for that stage. This makes it easier to preserve evidence and verify the result than repeatedly deleting and recreating subscriptions.