Background
In InfoPath form, to auto-populate the user details, generally, we, SharePoint Developers, use the GetUserProfileByName method by creating a data connection to
https://tahmidulabedin.me/_vti_bin/userprofileservice.asmx?WSDL . And, we used to use this in SharePoint on-premises. A few days ago, I was trying to create an InfoPath form in SharePoint Online with Office 365 and I got an error as "An error occurred while connecting to a Web Service."
After digging into the internet, I got that Microsoft have purposefully disabled access to the User Profile service to prevent Loop Back issues. As per Microsoft support, to call UserProfileService web service, the data security authentication is required before the service will return any data. And the method, GetUserProfileByName of SharePoint UserProfileService makes the call anonymously, which is the convention for all web calls. As anonymous access is not allowed in the web application, the SharePoint server returns an authentication error (code 401).
How to overcome this error
Now, I had to overcome this issue and I found one solution. To create a Data Connection for populating common user fields, using “User Information List” hidden list is the best approach. To create a data collection with this list, we need to follow the usual approach of creating a data connection in InfoPath and select SharePoint List or Library as the data source.
Fig: Selecting User Information List as Data Source
The hidden list will be shown with other SharePoint lists. And by selecting this, we will get several user attributes which can be pulled as required.
Fig: Selecting the needful fields
That's it. If anyone knows any better approach, please let me know in the comments below and I will update my tip.