[HTC 10 Guides, News, & Discussion] topjohnwu:
Method 1: Use Network Monitoring Applications​

Requirements: You are able get the update notification; you can download the OTA on your phone.

Won't work: Unfortunate devices stuck with the situation stated here.

By monitoring all network traffic on the device, it is natural that you can get the OTA links directly from HTC's server, because your phone is also downloading from there. I use a paid app called "Charles Web Debugging Proxy" for example. The trial mode can have the job done with no issues.

Download the app to your computer from the official site. It supports all platforms.

Open the app and let it initialize the network settings.

Now back to the phone, connect to the same network as your computer. Open Wi-Fi settings, long press your current connection, select "Edit connection".

Scroll to the bottom, enable proxy. For server, enter your computer's local network IP (search the web for guides to find the IP), and insert "8888" in port, then press save.

On the computer, Charles should detect that your phone is trying to connect the computer. Accept it and you should see all network traffic from your phone.

Back to phone, go to settings and check for system updates and download the update

You should see some addresses related to HTC/OTA on Charles, test the links and try if you can download the OTA zip file.

Method 2: Use Logcat And Guess the Download Link​

This will work on all devices, include those who cannot even receive OTA discussed here.

Connect your phone to your computer.

Type following commands, but don't press enter yet

adb logcat (show logs on screen)
or
adb logcat > log.txt (store logs in a file called log.txt)

Go to settings on your phone, press enter on computer to start logging your device right before you tap on the "Check for updates" on your phone (this is to reduce the logs you have to dig into to find information)

After it notifies there is an update available, or saying that your system is corrupt, press "Ctrl + C" to stop logging.

View the logs, you should find something like this:

11353 11803 D UpdaterAPK | UpdaterNetworkCheck: isIPTOn() IPTInfo is null
1600 1600 D htcCheckinService: onStartCommand()
1600 1600 D htcCheckinService: onStartCommand() the action name = com.htc.checkin.HTC_CHECKIN
1600 1600 W Settings: Setting device_provisioned has moved from android.provider.Settings.System to android.provider.Settings.Global, returning read-only value.
1600 1600 D htcCheckinService: Roaming is :false
1600 1600 I htcCheckinService: == Checkin triggered == A8.0(M)
11353 11536 V UpdaterAPK | DownloadProvider: starting query, database is not null; projection[0] is _id; projection[1] is entity; projection[2] is status; projection[3] is _data; projection[4] is lastmod; selection is hint=?; selectionArgs[0] is OTA_PERFUME_UHL_M60_SENSE80GP_hTC_Asia_TW_1.30.709.1_R-1.21.709.2_R2_release_477314i6fyk64xlvy886ba.zip; sort is null.
11353 11536 V UpdaterAPK | DownloadProvider: created cursor android.database.sqlite.SQLiteCursor@2edc675 on behalf of 1600
1600 11804 D PMS : acquireWL(6ee6ed9): PARTIAL_WAKE_LOCK htcCheckinService_300 0x1 1600 1000 null
2827 2827 D HtcTelephonyInternal: CMD_GET_ALL_DEVICE_ID_INFO
1600 11804 W htcCheckinService.CheckinProtocol: the build rom task id = 475995

By the example above, you can found out that the expected OTA update zip filename is

OTA_PERFUME_UHL_M60_SENSE80GP_hTC_Asia_TW_1.30.709.1_R-1.21.709.2_R2_release_477314i6fyk64xlvy886ba.zip

Finally, put the file name after the following web address:

http://fotadl-az.htc.com/secure/

With the example, the final result is

http://fotadl-az.htc.com/secure/OTA_PERFUME_UHL_M60_SENSE80GP_hTC_Asia_TW_1.30.709.1_R-1.21.709.2_R2_release_477314i6fyk64xlvy886ba.zip

(Note: I'm not sure if every OTA files follows the same rules, this is why I said this is "guessing" the download link)